home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / cheesey.s < prev    next >
Text File  |  1997-01-31  |  197KB  |  13,874 lines

  1.  
  2. CHEESEY equ 1
  3.  
  4. *************************************************
  5. * Stuff to do to get a C2P version:
  6. * Change copperlist
  7. * Change wall drawing
  8. * change floor drawing
  9. * change object drawing
  10. * change polygon drawing (ugh)
  11. * Write a palette generator program in AMOS
  12. * to provide a good 256 colour palette and
  13. * convert all graphics files specified
  14. * (possibly included in the game linker
  15. * program).
  16. * Possibly change the wall/floor/object
  17. * palettes to look nicer with more shades.
  18. * RE-implement stippling (if not present)
  19. * as it will look gorgeous now.
  20. *************************************************
  21.  
  22.     include    "utils:devpac/system.gs"
  23.  
  24. ;MIDDLEX set 96
  25. ;RIGHTX set 191
  26. ;BOTTOMY set 160 
  27.  
  28. ;MIDDLEX set 96
  29. ;RIGHTX set 191
  30. ;BOTTOMY set 160
  31.  
  32. _break    macro
  33. ;    bkpt    \1
  34.     endm
  35.  
  36.  
  37. FILTER    macro
  38. ;    move.l    d0,-(sp)
  39. ;    move.l    #65000,d0
  40. ;.loop\@
  41. ;    bchg    #1,$bfe001
  42. ;    dbra    d0,.loop\@
  43. ;    move.l    (sp)+,d0
  44.     endm
  45.  
  46. BLACK    macro
  47.     move.w    #0,$dff180
  48.     endm
  49.  
  50. RED    macro
  51.     move.w    #$f00,$dff180
  52.     endm
  53.  
  54. FLASHER macro
  55. ;    movem.l    d1,-(sp)
  56. ;    move.w    #-1,d1
  57. ;
  58. ;loop3\@
  59. ;;    move.w    #\1,$dff180
  60. ;    nop
  61. ;    nop
  62. ;    move.w    #\2,$dff180
  63. ;    nop
  64. ;    nop
  65. ;    dbra    d1,loop3\@
  66.  
  67. ;    movem.l    (sp)+,d1
  68.  
  69.     endm
  70.  
  71. GREEN    macro
  72.     move.w    #$0f0,$dff180
  73.     endm
  74.  
  75. BLUE    macro
  76.     move.w    #$f,$dff180
  77.     endm
  78.  
  79. DataCacheOff macro
  80.     movem.l    a0-a6/d0-d7,-(sp)
  81.     move.l    4.w,a6
  82.     moveq    #0,d0
  83.     move.l    #%0000000100000000,d1
  84.     jsr    _LVOCacheControl(a6)
  85.     movem.l    (sp)+,a0-a6/d0-d7
  86.     endm
  87.  
  88. DataCacheOn macro
  89.     movem.l    a0-a6/d0-d7,-(sp)
  90.     move.l    4.w,a6
  91.     moveq    #-1,d0
  92.     move.l    #%0000000100000000,d1
  93.     jsr    _LVOCacheControl(a6)
  94.     movem.l    (sp)+,a0-a6/d0-d7
  95.     endm
  96.  
  97.     opt    P=68020
  98.  
  99.     include work:includes/hardware/intbits.i
  100.  
  101. CD32VER equ 0
  102.  
  103. maxscrdiv EQU 8
  104. max3ddiv EQU 5
  105. playerheight EQU 12*1024
  106. playercrouched EQU 8*1024
  107. scrheight EQU 80
  108.  
  109. ; k/j/m
  110.  
  111. ; 4/8
  112. ; s/x
  113. ; b/n
  114.  
  115. midoffset EQU 104*4*40
  116.  
  117.  
  118.  SECTION Scrn,CODE
  119. OpenLib       equ -552
  120. CloseLib      equ -414
  121.  
  122. INTREQ        equ    $09C
  123. INTENA        equ    $09A
  124. INTENAR    equ    $01C
  125. DMACON        equ    $096
  126.  
  127. SERPER        equ    $032
  128. SERDATR    equ    $018
  129. SERDAT        equ    $030
  130. vhposrl    equ $007 
  131.  
  132. spr0ctl    equ $142
  133. spr1ctl    equ $14a
  134. spr2ctl    equ $152
  135. spr3ctl    equ $15a
  136. spr4ctl    equ $162
  137. spr5ctl    equ $16a
  138. spr6ctl    equ $172
  139. spr7ctl    equ $17a
  140. spr0pos    equ $140
  141. spr1pos    equ $148
  142. spr2pos    equ $150
  143. spr3pos    equ $158
  144. spr4pos    equ $160
  145. spr5pos    equ $168
  146. spr6pos    equ $170
  147. spr7pos    equ $178
  148. diwstart        equ $8e         ; Screen hardware registers.
  149. ddfstart        equ $92
  150. col0            equ $180
  151. col1            equ $182
  152. col2        equ $184
  153. col3        equ $186
  154. col4        equ $188
  155. col5        equ $18a
  156. col6        equ $18c
  157. col7        equ $18e
  158. col8            equ $190
  159. col9            equ $192
  160. col10           equ $194
  161. col11           equ $196
  162. col12           equ $198
  163. col13           equ $19a
  164. intreqrl    equ $01f
  165. bpl1pth         equ $e0
  166. bpl1ptl         equ $e2
  167. bpl2pth        equ $e4
  168. bpl2ptl        equ $e6
  169. bpl3pth        equ $e8
  170. bpl3ptl        equ $ea
  171. bpl4pth        equ $ec
  172. bpl4ptl        equ $ee
  173. bpl5pth        equ $f0
  174. bpl5ptl        equ $f2
  175. bpl6pth        equ $f4
  176. bpl6ptl        equ $f6
  177. bpl7pth        equ $f8
  178. bpl7ptl        equ $fa
  179. bpl8pth        equ $fc
  180. bpl8ptl        equ $fe
  181. spr0pth        equ $120
  182. spr0ptl        equ $122
  183. spr1pth        equ $124
  184. spr1ptl        equ $126
  185. spr2pth        equ $128
  186. spr2ptl        equ $12a
  187. spr3pth        equ $12c
  188. spr3ptl        equ $12e
  189. spr4pth        equ $130
  190. spr4ptl        equ $132
  191. spr5pth        equ $134
  192. spr5ptl        equ $136
  193. spr6pth        equ $138
  194. spr6ptl        equ $13a
  195. spr7pth        equ $13c
  196. spr7ptl        equ $13e
  197.  
  198.  
  199. ; move.l #length,d0
  200. ; moveq.l #2,d1    ; chipmem
  201. ; move.l 4.w,a6
  202. ; jsr allocmem(a6) = -198
  203.  
  204. ; tst.l d0
  205. ; beq.s ohbugger
  206. ; move.l d0,memaddr
  207.  
  208.  
  209. ; move.l 4.w,a6
  210. ; move.l memaddr,a1
  211. ; move.l #size,d0
  212. ; jsr freemem(a6) =-210
  213.  
  214.  
  215. ** This waits for the blitter to finish before allowing program
  216. ** execution to continue.
  217.  
  218.  
  219.  include "ab3:CHEESESAUCE/protsetupdecode"
  220.  
  221.  
  222. SAVEREGS MACRO
  223.  movem.l d0-d7/a0-a6,-(a7)
  224.  ENDM
  225.  
  226. GETREGS MACRO
  227.  movem.l (a7)+,d0-d7/a0-a6
  228.  ENDM
  229.  
  230.  
  231. WB MACRO
  232. \@bf:
  233.  btst #6,dmaconr(a6)
  234.  bne.s \@bf
  235.  ENDM
  236.  
  237. WBa MACRO
  238. \@bf:
  239.  move.w #\2,$dff180
  240.  
  241.  btst #6,$bfe001
  242.  bne.s \@bf
  243. \@bz:
  244.  
  245.  move.w #$f0f,$dff180
  246.  
  247.  btst #6,$bfe001
  248.  beq.s \@bz
  249.  
  250.  ENDM
  251.  
  252. *Another version for when a6 <> dff000
  253.  
  254. WBSLOW MACRO
  255. \@bf:
  256.  btst #6,$dff000+dmaconr
  257.  bne.s \@bf
  258.  ENDM
  259.  
  260. WT MACRO
  261. \@bf:
  262.  btst #6,(a3)
  263.  bne.s \@bd
  264.  rts
  265. \@bd: 
  266.  btst #4,(a0)
  267.  beq.s \@bf
  268.  ENDM
  269.  
  270. WTNOT MACRO
  271. \@bf:
  272.  btst #6,(a3)
  273.  bne.s \@bd
  274.  rts
  275. \@bd: 
  276.  btst #4,(a0)
  277.  bne.s \@bf
  278.  ENDM
  279.  
  280. **
  281.  
  282.  include "ab3:CHEESESAUCE/ProtectionProtection"
  283.  include "macros.i"
  284.  include "ab3:CHEESESAUCE/defs.i"
  285.  
  286. wtclickk:
  287.  btst #6,$bfe001
  288.  bne.s wtclickk
  289.  
  290.  move.w (a0)+,LEVTOPLAY
  291.  
  292.  
  293.  jsr MakePatch
  294.  
  295. ;    FLASHER $0f0,$fff
  296.  
  297. ; PROTFCALC
  298. ; PROTGCALC
  299. ; PROTHCALC
  300. ; PROTICALC
  301. ; PROTKCALC
  302. ; PROTLCALC
  303. ; PROTMCALC
  304.  
  305.  
  306.  
  307.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  308.  move.w intenar(a6),_storeint
  309.  and.w #$c000,_storeint
  310.  
  311.  move.w #13,SERPER(a6)    ;19200 baud, 8 bits, no parity
  312.  
  313.  
  314.  st GOURSEL
  315.  
  316.  move.l 4.w,a6
  317.  lea VBLANKInt(pc),a1
  318.  moveq #INTB_COPER,d0
  319.  jsr _LVOAddIntServer(a6)
  320.  
  321.     IFEQ CD32VER
  322.  move.l 4.w,a6
  323.  lea KEYInt(pc),a1
  324.  moveq #INTB_PORTS,d0
  325.  jsr _LVOAddIntServer(a6)
  326.     ENDC
  327.  
  328.  IFNE CD32VER
  329.  clr.b PLR1KEYS
  330.  clr.b PLR1PATH
  331.  clr.b PLR1MOUSE
  332.  st PLR1JOY
  333.  clr.b PLR2KEYS
  334.  clr.b PLR2PATH
  335.  clr.b PLR2MOUSE
  336.  st PLR2JOY
  337.  ELSE
  338.  st PLR1KEYS
  339.  clr.b PLR1PATH
  340.  clr.b PLR1MOUSE
  341.  clr.b PLR1JOY
  342.  st PLR2KEYS
  343.  clr.b PLR2PATH
  344.  clr.b PLR2MOUSE
  345.  clr.b PLR2JOY
  346.  ENDC
  347.  
  348.  PRSDO
  349.  
  350.  move.l #2,d1    
  351.  move.l #10240*2,d0
  352.  move.l 4.w,a6
  353.  jsr -198(a6)
  354.  move.l d0,TEXTSCRN
  355.  move.w d0,TSPTl
  356.  swap d0
  357.  move.w d0,TSPTh
  358.  
  359.  move.l #nullspr,d0
  360.  move.w d0,txs0l
  361.  move.w d0,txs1l
  362.  move.w d0,txs2l
  363.  move.w d0,txs3l
  364.  move.w d0,txs4l
  365.  move.w d0,txs5l
  366.  move.w d0,txs6l
  367.  move.w d0,txs7l
  368.  swap d0
  369.  move.w d0,txs0h
  370.  move.w d0,txs1h
  371.  move.w d0,txs2h
  372.  move.w d0,txs3h
  373.  move.w d0,txs4h
  374.  move.w d0,txs5h
  375.  move.w d0,txs6h
  376.  move.w d0,txs7h 
  377.  
  378.  move.l #0,d1    
  379.  move.l #140000,d0
  380.  move.l 4.w,a6
  381.  jsr -198(a6)
  382.  move.l d0,LEVELDATA
  383.  
  384.  move.l #0,d1
  385.  
  386.  ifeq CHEESEY    
  387.  move.l #320*256,d0
  388.  endc
  389.  
  390.  ifne CHEESEY
  391.  move.l #320*160,d0
  392.  endc
  393.  
  394.  move.l 4.w,a6
  395.  jsr -198(a6)
  396.  move.l d0,FASTBUFFER
  397.  
  398.  jsr START
  399.  
  400.  rts
  401.  
  402. FASTBUFFER: dc.l 0
  403.  
  404. _storeint
  405.     dc.w 0
  406.  
  407. * Load level into buffers.
  408.  clr.b doanything
  409.  clr.b dosounds
  410.  
  411. ; DRAW TEXT SCREEN
  412.  
  413. TWEENTEXT:
  414.  
  415.  move.l #LEVELTEXT,a0
  416.  move.w PLOPT,d0
  417.  muls #82*16,d0
  418.  add.l d0,a0
  419.  
  420.  move.w #14,d7
  421.  move.w #0,d0
  422. DOWNTEXT:
  423.  move.l TEXTSCRN,a1
  424.  jsr DRAWLINEOFTEXT
  425.  addq #1,d0
  426.  add.w #82,a0
  427.  dbra d7,DOWNTEXT
  428.  rts
  429.  
  430. FONTADDRS:
  431.  dc.l ENDFONT0,CHARWIDTHS0
  432.  dc.l ENDFONT1,CHARWIDTHS1
  433.  dc.l ENDFONT2,CHARWIDTHS2
  434.  
  435. ENDFONT0:
  436.  incbin "endfont0"
  437. CHARWIDTHS0:
  438.  incbin "charwidths0"
  439. ENDFONT1:
  440. ; incbin "endfont1"
  441. CHARWIDTHS1:
  442. ; incbin "charwidths1"
  443. ENDFONT2:
  444. ; incbin "endfont2"
  445. CHARWIDTHS2:
  446. ; incbin "charwidths2"
  447.  
  448.  even
  449.  
  450. DRAWLINEOFTEXT:
  451.  movem.l d0/a0/d7,-(a7)
  452.  
  453.  muls #80*16,d0
  454.  add.l d0,a1    ; screen pointer
  455.  
  456.  move.l #FONTADDRS,a3
  457.  moveq #0,d0
  458.  move.b (a0)+,d0
  459.  move.l (a3,d0.w*8),a2
  460.  move.l 4(a3,d0.w*8),a3
  461.  
  462.  moveq #0,d1    ; width counter:
  463.  move.w #79,d6
  464.  tst.b (a0)+
  465.  beq.s NOTCENTRED
  466.  moveq #-1,d5
  467.  move.l a0,a4
  468.  moveq #0,d2
  469.  moveq #0,d3
  470.  move.w #79,d0    ; number of chars
  471. .addup:
  472.  addq #1,d5
  473.  move.b (a4)+,d2
  474.  move.b -32(a3,d2.w),d4
  475.  add.w d4,d3
  476.  cmp.b #32,d2
  477.  beq.s .DONTPUTIN
  478.  move.w d5,d6
  479.  move.w d3,d1
  480. .DONTPUTIN:
  481.  dbra d0,.addup
  482.  asr.w #1,d1
  483.  neg.w d1
  484.  add.w #320,d1    ; horiz pos of start x
  485.  
  486. NOTCENTRED:
  487.  move.w d6,d7
  488. DOACHAR:
  489.  moveq #0,d2
  490.  move.b (a0)+,d2
  491.  sub.w #32,d2
  492.  moveq #0,d6
  493.  move.b (a3,d2.w),d6
  494.  asl.w #5,d2
  495.  lea (a2,d2.w),a4    ; char font
  496. val SET 0
  497.  REPT 16
  498.  move.w (a4)+,d0
  499.  bfins d0,val(a1){d1:d6}
  500. val SET val+80
  501.  ENDR
  502.  add.w d6,d1
  503.  dbra d7,DOACHAR
  504.  movem.l (a7)+,d0/a0/d7
  505.  rts 
  506.  
  507.  
  508. CLRTWEENSCRN:
  509.  move.l TEXTSCRN,a0
  510.  move.w #(10240/16)-1,d0
  511.  move.l #$0,d1
  512. .lll
  513.  move.l d1,(a0)+
  514.  move.l d1,(a0)+
  515.  move.l d1,(a0)+
  516.  move.l d1,(a0)+
  517.  move.l d1,(a0)+
  518.  move.l d1,(a0)+
  519.  move.l d1,(a0)+
  520.  move.l d1,(a0)+
  521.  dbra d0,.lll
  522.  rts
  523.  
  524. LEVTOPLAY: dc.w 0
  525.  
  526. COPYLINK: dc.l 0
  527.  
  528. PLAYTHEGAME:
  529.  
  530.  move.w #0,TXTCOLL
  531.  
  532.  bsr CLRTWEENSCRN
  533.  
  534.  cmp.b #'n',mors
  535.  bne.s .notext
  536.  bsr TWEENTEXT
  537. .notext
  538.  
  539. ;charlie 
  540.  move.l #TEXTCOP,$dff080
  541.  
  542.  move.w #$10,d0
  543.  move.w #7,d1
  544.  
  545. .fdup
  546.  move.w d0,TXTCOLL
  547.  add.w #$121,d0
  548. .wtframe:
  549.  btst #5,$dff000+intreqrl
  550.  beq.s .wtframe
  551.  move.w #$0020,$dff000+intreq
  552.  dbra d1,.fdup
  553.  
  554.  jsr INITCOPPERSCRN
  555.  
  556.  st DOUBLEHEIGHT
  557.  st DOUBLEWIDTH
  558.  
  559.  move.l #$dff000,a6
  560.  jsr SETPLAYERS
  561.  
  562.  move.l #0,TYPEOFMEM
  563.  move.l #LLname,a0
  564.  jsr LOADAFILE
  565.  move.l d0,LINKS
  566.  
  567.  move.l #0,TYPEOFMEM
  568.  move.l #LLFname,a0
  569.  jsr LOADAFILE
  570.  move.l d0,FLYLINKS
  571.  
  572. ; Get level memory.
  573.  
  574.  move.l #1,d1
  575.  move.l #40000,d0
  576.  move.l 4.w,a6
  577.  jsr -198(a6)
  578.  move.l d0,LEVELGRAPHICS
  579.  
  580.  move.l #1,d1
  581.  move.l #40000,d0
  582.  move.l 4.w,a6
  583.  jsr -198(a6)
  584.  move.l d0,LEVELCLIPS
  585.  
  586.  move.l #$dff000,a6
  587.  
  588. ; move.b LEVTOPLAY,d0
  589. ; move.b d0,LEVA
  590. ; move.b d0,LEVB
  591. ; move.b d0,LEVC
  592. ; move.b d0,LEVD
  593. ; move.b d0,LEVE
  594.  
  595.  
  596. ; move.l #LEVELDATAD,LEVELDATA
  597. ; move.l #LEVELGRAPHICSD,LEVELGRAPHICS
  598. ; move.l #LEVELCLIPSD,LEVELCLIPS
  599.  
  600. ; bra noload
  601.  
  602. *********************************
  603.  
  604. ; move.l doslib,a6
  605. ; move.l #LLname,d1
  606. ; move.l #1005,d2
  607. ; jsr -30(a6)
  608. ; move.l d0,LLhandle
  609. ;
  610. ; move.l doslib,a6
  611. ; move.l d0,d1
  612. ; move.l #LINKS,d2
  613. ; move.l #10000,d3
  614. ; jsr -42(a6)
  615. ;
  616. ; move.l doslib,a6
  617. ; move.l LLhandle,d1
  618. ; jsr -36(a6)
  619.  
  620.  ********************************
  621.  
  622. ; move.l doslib,a6
  623. ; move.l #LLFname,d1
  624. ; move.l #1005,d2
  625. ; jsr -30(a6)
  626. ; move.l d0,LLhandle
  627.  
  628. ; move.l doslib,a6
  629. ; move.l d0,d1
  630. ; move.l #FLYLINKS,d2
  631. ; move.l #10000,d3
  632. ; jsr -42(a6)
  633.  
  634. ; move.l doslib,a6
  635. ; move.l LLhandle,d1
  636. ; jsr -36(a6)
  637.  
  638.  ************************
  639.  ********
  640.  
  641.  
  642.  move.l doslib,a6
  643.  move.l #LDname,d1
  644.  move.l #1005,d2
  645.  jsr -30(a6)
  646.  move.l d0,LDhandle
  647.  
  648.  move.l doslib,a6
  649.  move.l d0,d1
  650.  move.l LEVELCLIPS,d2
  651.  move.l #40000,d3
  652.  jsr -42(a6)
  653.  
  654.  move.l doslib,a6
  655.  move.l LDhandle,d1
  656.  jsr -36(a6)
  657.  
  658. *************************************
  659.     move.l    LEVELCLIPS,d0
  660.     moveq    #0,d1
  661.     move.l LEVELDATA,a0
  662.     lea    WorkSpace,a1
  663.     lea    $0,a2
  664.     jsr    unLHA
  665. *************************************
  666.  
  667. ********
  668.  
  669.  move.l doslib,a6
  670.  move.l #LGname,d1
  671.  move.l #1005,d2
  672.  jsr -30(a6)
  673.  move.l d0,LGhandle
  674.  
  675.  move.l doslib,a6
  676.  move.l d0,d1
  677.  move.l LEVELCLIPS,d2
  678.  move.l #40000,d3
  679.  jsr -42(a6)
  680.  
  681.  move.l doslib,a6
  682.  move.l LGhandle,d1
  683.  jsr -36(a6)
  684.  
  685. *************************************
  686.     move.l    LEVELCLIPS,d0
  687.     moveq    #0,d1
  688.     move.l LEVELGRAPHICS,a0
  689.     lea    WorkSpace,a1
  690.     lea    $0,a2
  691.     jsr    unLHA
  692. *************************************
  693.  
  694. ********
  695.  
  696.  move.l doslib,a6
  697.  move.l #LCname,d1
  698.  move.l #1005,d2
  699.  jsr -30(a6)
  700.  move.l d0,LChandle
  701.  
  702.  move.l doslib,a6
  703.  move.l d0,d1
  704.  move.l #WorkSpace+16384,d2
  705.  move.l #16000,d3
  706.  jsr -42(a6)
  707.  
  708.  move.l doslib,a6
  709.  move.l LChandle,d1
  710.  jsr -36(a6)
  711.  
  712. *************************************
  713.     move.l    #WorkSpace+16384,d0
  714.     moveq    #0,d1
  715.     move.l LEVELCLIPS,a0
  716.     lea    WorkSpace,a1
  717.     lea    $0,a2
  718.     jsr    unLHA
  719. *************************************
  720.  
  721.  
  722. *******
  723.  
  724. noload:
  725.  
  726. ********
  727.  
  728. ; move.l doslib,a6
  729. ; move.l #Prefsname,d1
  730. ; move.l #1005,d2
  731. ; jsr -30(a6)
  732. ; move.l d0,Prefshandle
  733.  
  734. ; move.l doslib,a6
  735. ; move.l d0,d1
  736. ; move.l #Prefsfile,d2
  737. ; move.l #50,d3
  738. ; jsr -42(a6)
  739.  
  740. ; move.l doslib,a6
  741. ; move.l Prefshandle,d1
  742. ; jsr -36(a6)
  743.  
  744. *******
  745.  
  746.  IFNE CD32VER
  747.  move.l doslib,a6
  748.  move.l #115,d1
  749.  jsr -198(a6)
  750.  ENDC
  751.  
  752.  
  753. ; move.l doslib,d0
  754. ; move.l d0,a1
  755. ; move.l 4.w,a6
  756. ; jsr CloseLib(a6)
  757.  
  758.  move.l #$dff000,a6
  759.  
  760. charlie:
  761. ; jmp  ENDGAMESCROLL
  762.  
  763.     move.w #$87c0,dmacon(a6)
  764.  
  765.     move.w    #%1000000000100000,dmacon(a6)
  766.  
  767. ; move.w intenar(a6),saveinters
  768.     
  769.     move.w #%00101111,intena(a6)
  770.  
  771.     move.w #255,adkcon(a6)
  772.  
  773.  
  774. *** Put myself in supervisor mode
  775.  
  776.  bra blag
  777. ; move.l $6c,d0
  778. ; move.l #blag,$6c
  779. ; move.w #$8010,intreq(a6)
  780.  
  781.  rts
  782.  
  783. saveit: ds.l 10
  784. doslibname: dc.b 'dos.library',0
  785.  even
  786. doslib: dc.l 0
  787.  
  788. mors: dc.w 0
  789.  
  790. LDname: dc.b 'tkg2:levels/level_'
  791. LEVA:
  792.  dc.b 'a/twolev.bin',0
  793.  even
  794. LDhandle: dc.l 0
  795. LGname: dc.b 'tkg2:levels/level_'
  796. LEVB:
  797.  dc.b 'a/twolev.graph.bin',0
  798.  even
  799. LGhandle: dc.l 0
  800. LCname: dc.b 'tkg2:levels/level_'
  801. LEVC:
  802.  dc.b 'a/twolev.clips',0
  803.  even
  804. LChandle: dc.l 0
  805. LLname: dc.b 'tkg2:levels/level_'
  806. LEVD:
  807.  dc.b 'a/twolev.map',0
  808.  even
  809. LLFname: dc.b 'tkg2:levels/level_'
  810. LEVE:
  811.  dc.b 'a/twolev.flymap',0
  812.  even
  813. LLhandle: dc.l 0
  814.  
  815.     cnop    0,4
  816.  
  817. Prefsname: dc.b 'ram:prefs',0
  818.  even
  819. Prefshandle: dc.l 0
  820.  
  821. Prefsfile:
  822.  dc.b 'k4nx'
  823.  
  824.  even
  825.  
  826.  cnop 0,4
  827.  
  828. VBLANKInt
  829.  dc.l 0,0
  830.  dc.b NT_INTERRUPT,9
  831.  dc.l Prefsname
  832.  dc.l 0
  833.  dc.l Chan0inter
  834.  
  835.  
  836. KEYInt
  837.  dc.l 0,0
  838.  dc.b NT_INTERRUPT,127
  839.  dc.l Prefsname
  840.  dc.l 0
  841.  dc.l key_interrupt
  842.  
  843.  
  844. blag:
  845. ; move.w #$10,intreq(a6)
  846. ; move.l d0,$6c
  847. ; move.w #$7fff,intena(a6)
  848.  
  849. ; move.w #$20,$dff1dc
  850.  
  851. ; move.l 4.w,a6
  852. ; lea VBLANKInt(pc),a1
  853. ; moveq #INTB_COPER,d0
  854. ; jsr _LVOAddIntServer(a6)
  855.  
  856. ****************************
  857. * Initialize level
  858. ****************************
  859. * Poke all clip offsets into
  860. * correct bit of level data.
  861. ****************************
  862.  move.l LEVELGRAPHICS,a0
  863.  move.l 12(a0),a1
  864.  add.l a0,a1
  865.  move.l a1,ZoneGraphAdds
  866.  move.l (a0),a1
  867.  add.l a0,a1
  868.  move.l a1,DoorData
  869.  move.l 4(a0),a1
  870.  add.l a0,a1
  871.  move.l a1,LiftData
  872.  move.l 8(a0),a1
  873.  add.l a0,a1
  874.  move.l a1,SwitchData
  875.  adda.w #16,a0
  876.  move.l a0,ZoneAdds
  877.  
  878.  move.l LEVELDATA,a4
  879.  lea 160*10(a4),a1
  880.  
  881.  lea 54(a1),a2
  882.  move.l a2,CPtPos
  883.  move.w 12(a1),NumCPts
  884.  move.w 14(a1),NumLevPts
  885.  
  886.  move.l 16+6(a1),a2
  887.  add.l a4,a2
  888.  move.l a2,Points
  889.  move.w 8+6(a1),d0
  890.  lea 4(a2,d0.w*4),a2
  891.  move.l a2,PointBrights
  892.  move.w 16(a1),d0
  893.  addq #1,d0
  894.  muls #80,d0
  895.  add.l d0,a2
  896.  move.l a2,ZoneBorderPts
  897.  
  898.  move.l 20+6(a1),a2
  899.  add.l a4,a2
  900.  move.l a2,FloorLines
  901.  move.w -2(a2),ENDZONE
  902.  move.l 24+6(a1),a2
  903.  add.l a4,a2
  904.  move.l a2,ObjectData
  905. *****************************************
  906. * Just for charles
  907.  
  908. ; move.w #$6060,6(a2)
  909. ; move.l #$d0000,8(a2)
  910. ; sub.w #40,4(a2)
  911. ; move.w #45*256+45,14(a2)
  912. ****************************************
  913.  move.l 28+6(a1),a2
  914.  add.l a4,a2
  915.  move.l a2,PlayerShotData
  916.  move.l 32+6(a1),a2
  917.  add.l a4,a2
  918.  move.l a2,NastyShotData
  919.  
  920.  add.l #64*20,a2
  921.  move.l a2,OtherNastyData
  922.  
  923.  move.l 36+6(a1),a2
  924.  add.l a4,a2
  925.  move.l a2,ObjectPoints  
  926.  move.l 40+6(a1),a2
  927.  add.l a4,a2
  928.  move.l a2,PLR1_Obj
  929.  move.l 44+6(a1),a2
  930.  add.l a4,a2
  931.  move.l a2,PLR2_Obj
  932.  move.w 14+6(a1),NumObjectPoints
  933.  
  934. ; bra noclips
  935.   
  936.  move.l LEVELCLIPS,a2
  937.  moveq #0,d0
  938.  move.w 10+6(a1),d7    ;numzones
  939.  move.w d7,NUMZONES
  940. assignclips:
  941.  move.l (a0)+,a3
  942.  add.l a4,a3    ; pointer to a zone
  943.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  944. dowholezone:
  945.  tst.w (a3)
  946.  blt.s nomorethiszone
  947.  tst.w 2(a3)
  948.  blt.s thisonenull
  949.  
  950.  move.l d0,d1
  951.  asr.l #1,d1
  952.  move.w d1,2(a3)
  953.  
  954. findnextclip:
  955.  cmp.w #-2,(a2,d0.l)
  956.  beq.s foundnextclip
  957.  addq.l #2,d0
  958.  bra.s findnextclip
  959. foundnextclip
  960.  addq.l #2,d0
  961.  
  962. thisonenull:
  963.  addq #8,a3 
  964.  bra.s dowholezone
  965. nomorethiszone:
  966.  dbra d7,assignclips
  967.  
  968.  lea (a2,d0.l),a2
  969.  move.l a2,CONNECT_TABLE
  970.  
  971. noclips:
  972.  
  973. * Put in addresses of glowything
  974.  
  975.  
  976. ************************************
  977.  
  978. ; cmp.b #'k',Prefsfile
  979. ; bne.s nkb
  980.  
  981. ;nkb:
  982. ; cmp.b #'m',Prefsfile
  983. ; bne.s nmc
  984. ; clr.b PLR1KEYS
  985. ; clr.b PLR1PATH
  986. ; st PLR1MOUSE
  987. ; clr.b PLR1JOY
  988. ;nmc:
  989. ; cmp.b #'j',Prefsfile
  990. ; bne.s njc
  991. ; clr.b PLR1KEYS
  992. ; clr.b PLR1PATH
  993. ; clr.b PLR1MOUSE
  994. ; st PLR1JOY
  995. ;njc:
  996.  
  997.  clr.b PLR1_StoodInTop
  998.  move.l #playerheight,PLR1s_height
  999.  
  1000.  move.l #empty,pos1LEFT
  1001.  move.l #empty,pos2LEFT
  1002.  move.l #empty,pos1RIGHT
  1003.  move.l #empty,pos2RIGHT
  1004.  move.l #empty,pos0LEFT
  1005.  move.l #empty,pos3LEFT
  1006.  move.l #empty,pos0RIGHT
  1007.  move.l #empty,pos3RIGHT
  1008.  move.l #emptyend,Samp0endLEFT
  1009.  move.l #emptyend,Samp1endLEFT
  1010.  move.l #emptyend,Samp0endRIGHT
  1011.  move.l #emptyend,Samp1endRIGHT
  1012.  move.l #emptyend,Samp2endLEFT
  1013.  move.l #emptyend,Samp3endLEFT
  1014.  move.l #emptyend,Samp2endRIGHT
  1015.  move.l #emptyend,Samp3endRIGHT
  1016.  
  1017.  
  1018.  move.l #nullline,d0
  1019.  move.w d0,n1l
  1020.  swap d0
  1021.  move.w d0,n1h
  1022.  
  1023.  move.l #PANELSTRIP,d0
  1024.  move.w d0,p1l
  1025.  swap d0
  1026.  move.w d0,p1h
  1027.  swap d0
  1028.  add.l #40*16,d0
  1029.  move.w d0,p2l
  1030.  swap d0
  1031.  move.w d0,p2h
  1032.  swap d0
  1033.  add.l #40*16,d0
  1034.  move.w d0,p3l
  1035.  swap d0
  1036.  move.w d0,p3h
  1037.  swap d0
  1038.  add.l #40*16,d0
  1039.  move.w d0,p4l
  1040.  swap d0
  1041.  move.w d0,p4h
  1042.  swap d0
  1043.  add.l #40*16,d0
  1044.  move.w d0,p5l
  1045.  swap d0
  1046.  move.w d0,p5h
  1047.  swap d0
  1048.  add.l #40*16,d0
  1049.  move.w d0,p6l
  1050.  swap d0
  1051.  move.w d0,p6h
  1052.  swap d0
  1053.  add.l #40*16,d0
  1054.  move.w d0,p7l
  1055.  swap d0
  1056.  move.w d0,p7h
  1057.  swap d0
  1058.  add.l #40*16,d0
  1059.  move.w d0,p8l
  1060.  swap d0
  1061.  move.w d0,p8h
  1062.  
  1063. *******************************
  1064. * TIMER SCREEN SETUP
  1065. ; move.l #TimerScr,d0
  1066. ; move.w d0,p1l
  1067. ; swap d0
  1068. ; move.w d0,p1h
  1069. ; move.w #$1201,Panelcon
  1070.  
  1071. ; move.l #borders,d0
  1072. ; move.w d0,s0l
  1073. ; swap d0
  1074. ; move.w d0,s0h
  1075. ; move.l #borders+2592,d0
  1076. ; move.w d0,s1l
  1077. ; swap d0
  1078. ; move.w d0,s1h
  1079. ; move.l #borders+2592*2,d0
  1080. ; move.w d0,s2l
  1081. ; swap d0
  1082. ; move.w d0,s2h
  1083. ; move.l #borders+2592*3,d0
  1084. ; move.w d0,s3l
  1085. ; swap d0
  1086. ; move.w d0,s3h
  1087.  
  1088.  move.l #nullspr,d0
  1089.  move.w d0,s0l
  1090.  move.w d0,s1l
  1091.  move.w d0,s2l
  1092.  move.w d0,s3l
  1093.  
  1094.  move.w d0,s4l
  1095.  move.w d0,s5l
  1096.  move.w d0,s6l
  1097.  move.w d0,s7l
  1098.  swap d0
  1099.  
  1100.  move.w d0,s0h
  1101.  move.w d0,s1h
  1102.  move.w d0,s2h
  1103.  move.w d0,s3h
  1104.  
  1105.  move.w d0,s4h
  1106.  move.w d0,s5h
  1107.  move.w d0,s6h
  1108.  move.w d0,s7h 
  1109.  
  1110.  
  1111. ; move.w #52*256+64,borders
  1112. ; move.w #212*256+0,borders+8
  1113. ; move.w #52*256+64,borders+2592
  1114. ; move.w #212*256+128,borders+8+2592
  1115. ; move.w #52*256+192,borders+2592*2
  1116. ; move.w #212*256+0,borders+8+2592*2
  1117. ; move.w #52*256+192,borders+2592*3
  1118. ; move.w #212*256+128,borders+8+2592*3
  1119.  
  1120.   
  1121.  
  1122.  move.l #bigfield,d0
  1123.  move.w d0,ocl
  1124.  swap d0
  1125.  move.w d0,och
  1126.  
  1127.  bset.b #1,$bfe001
  1128.  
  1129. ; jmp stuff
  1130. ;endstuff:
  1131.  
  1132.  move.w #$00ff,$dff09e
  1133.  
  1134. ; move.l #Blurbfield,$dff080
  1135.  
  1136.  move.w #0,d0
  1137.  
  1138.  move.l #scrn,d0
  1139.  move.w d0,pl1l
  1140.  swap d0
  1141.  move.w d0,pl1h
  1142.  
  1143.  move.l #scrn+40,d0
  1144.  move.w d0,pl2l
  1145.  swap d0
  1146.  move.w d0,pl2h
  1147.  
  1148.  move.l #scrn+80,d0
  1149.  move.w d0,pl3l
  1150.  swap d0
  1151.  move.w d0,pl3h
  1152.  
  1153.  move.l #scrn+120,d0
  1154.  move.w d0,pl4l
  1155.  swap d0
  1156.  move.w d0,pl4h
  1157.  
  1158.  move.l #scrn+160,d0
  1159.  move.w d0,pl5l
  1160.  swap d0
  1161.  move.w d0,pl5h
  1162.  
  1163.  move.l #scrn+200,d0
  1164.  move.w d0,pl6l
  1165.  swap d0
  1166.  move.w d0,pl6h
  1167.  
  1168.  move.l #scrn+240,d0
  1169.  move.w d0,pl7l
  1170.  swap d0
  1171.  move.w d0,pl7h
  1172.  
  1173.  
  1174. ****************************
  1175.  jsr INITPLAYER
  1176. ; bsr initobjpos
  1177. ****************************
  1178.  
  1179.  
  1180.  move.l #$dff000,a6
  1181.  
  1182.  move.l #null,$dff0a0
  1183.  move.w #100,$dff0a4
  1184.  move.w #443,$dff0a6
  1185.  move.w #63,$dff0a8
  1186.  
  1187.  move.l #null2,$dff0b0
  1188.  move.w #100,$dff0b4
  1189.  move.w #443,$dff0b6
  1190.  move.w #63,$dff0b8
  1191.  
  1192.  move.l #null4,$dff0c0
  1193.  move.w #100,$dff0c4
  1194.  move.w #443,$dff0c6
  1195.  move.w #63,$dff0c8
  1196.  
  1197.  move.l #null3,$dff0d0
  1198.  move.w #100,$dff0d4
  1199.  move.w #443,$dff0d6
  1200.  move.w #63,$dff0d8
  1201.  
  1202.  ifeq CHEESEY
  1203.  
  1204.  move.l #tab,a1
  1205.  move.w #64,d7
  1206.  move.w #0,d6
  1207. outerlop
  1208.  move.l #pretab,a0
  1209.  move.w #255,d5
  1210. scaledownlop:
  1211.  move.b (a0)+,d0
  1212.  ext.w d0
  1213.  ext.l d0
  1214.  muls d6,d0
  1215.  asr.l #6,d0
  1216.  move.b d0,(a1)+
  1217.  dbra d5,scaledownlop
  1218.  addq #1,d6
  1219.  dbra d7,outerlop
  1220.  
  1221.  endc
  1222.  
  1223.  move.l #$dff000,a6
  1224.  
  1225.  move.w #$c018,intena(a6)
  1226.  
  1227.  move.w #$f,dmacon(a6)
  1228.  move.w #$820f,dmacon(a6)
  1229.  
  1230. ; bsr protinit
  1231.  
  1232.  
  1233. ; move.w #$20,$1dc(a6)
  1234.  
  1235.  move.w #$0,$dff034
  1236.  move.w #0,Conditions
  1237.  
  1238.  cmp.b #'n',mors
  1239.  beq.s .nokeys
  1240.  move.w #%111111111111,Conditions
  1241. .nokeys:
  1242.  
  1243.  move.l #KeyMap,a5
  1244.  clr.b $45(a5)
  1245.  
  1246.  move.l #ingame,mt_data
  1247.  clr.b UseAllChannels
  1248.  
  1249. ; cmp.b #'b',Prefsfile+3
  1250. ; bne.s .noback
  1251. ; jsr mt_init
  1252. ;.noback:
  1253. ;
  1254. ; clr.b CHANNELDATA
  1255. ; clr.b CHANNELDATA+8
  1256. ; clr.b CHANNELDATA+16
  1257. ; clr.b CHANNELDATA+24
  1258. ;
  1259. ; cmp.b #'b',Prefsfile+3
  1260. ; bne.s noreserve
  1261. ;
  1262. ; st CHANNELDATA
  1263. ; st CHANNELDATA+8
  1264. ; st CHANNELDATA+16
  1265. ; st CHANNELDATA+24
  1266. ;noreserve: 
  1267.  
  1268. ; st CHANNELDATA
  1269. ; st CHANNELDATA+8
  1270.  
  1271.  move.l SampleList+6*8,pos0LEFT
  1272.  move.l SampleList+6*8+4,Samp0endLEFT
  1273.  move.l #playerheight,PLR1s_targheight
  1274.  move.l #playerheight,PLR1s_height
  1275.  move.l #playerheight,PLR2s_targheight
  1276.  move.l #playerheight,PLR2s_height
  1277.  
  1278. ; cmp.b #'n',mors
  1279. ; beq.s nohandshake
  1280. ;
  1281. ; move.b #%11011000,$bfd200
  1282. ; move.b #%00010000,$bfd000
  1283. ;waitloop:
  1284. ; btst.b #4,$bfd000
  1285. ; bne.s waitloop
  1286. ; move.b #%11000000,$bfd200
  1287.  
  1288. ;wtmouse:
  1289. ; btst #6,$bfe001
  1290. ; bne.s wtmouse
  1291.  
  1292. ;nohandshake:
  1293.  
  1294. ; jmp end
  1295.  
  1296.  move.l COPSCRN1,drawpt
  1297.  move.l COPSCRN2,olddrawpt
  1298.  
  1299.  jsr CLEARKEYBOARD
  1300. ; jsr MAKEBACKROUT
  1301.  
  1302.  clr.b MASTERQUITTING
  1303.  
  1304.  cmp.b #'n',mors
  1305.  seq SLAVEQUITTING
  1306.  
  1307. ; move.w #200,PLAYERTWOHEALTH
  1308. ; move.w #200,PLAYERONEHEALTH
  1309.  
  1310. ; move.l #ANOTHERSUP,$80
  1311. ; trap #0
  1312. ; rts
  1313. ;
  1314. ;ANOTHERSUP:
  1315.  
  1316.  move.l $4.w,a6
  1317.  jsr _LVOSuperState(a6)
  1318.  move.l d0,SSTACK
  1319.  
  1320.  CACHE_FREEZE_OFF d2
  1321.  
  1322. ; charlie
  1323. ; DATA_CACHE_ON d2
  1324.  
  1325.  DataCacheOn
  1326.  
  1327.  move.l $4.w,a6
  1328.  move.l SSTACK,d0
  1329.  jsr _LVOUserState(a6)
  1330.  
  1331.  move.w #0,hitcol
  1332.  move.w #0,hitcol2
  1333.  
  1334.  cmp.b #'n',mors
  1335.  bne.s NOCLTXT
  1336.  
  1337.  move.b #0,lastpressed
  1338. .wtpress
  1339.  btst #6,$bfe001
  1340.  beq.s CLOSETXT
  1341.  btst #7,$bfe001
  1342.  beq.s CLOSETXT
  1343.  tst.b lastpressed
  1344.  beq.s .wtpress
  1345.  
  1346. CLOSETXT:
  1347.  
  1348.  move.w #$8f8,d0
  1349.  move.w #7,d1
  1350.  
  1351. .fdup
  1352.  move.w d0,TXTCOLL
  1353.  sub.w #$121,d0
  1354. .wtframe:
  1355.  btst #5,$dff000+intreqrl
  1356.  beq.s .wtframe
  1357.  move.w #$0020,$dff000+intreq
  1358.  dbra d1,.fdup
  1359.  
  1360.  move.w #0,TXTCOLL
  1361.  
  1362. NOCLTXT:
  1363.  
  1364.  
  1365.  
  1366.     move.l    4.w,a6
  1367.     jsr    _LVOForbid(a6)
  1368. ;    jsr    _LVODisable(a6)
  1369.  
  1370.  
  1371. ;    move.w    #%0111111111111111,intena+$dff000
  1372. ;    move.w    #%1000000011111111,intena+$dff000
  1373.  
  1374.  
  1375. ;charlie 
  1376. ; move.l #PALETTEBIT,$dff084
  1377.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1378.  
  1379.  
  1380.  clr.b PLR1_Ducked
  1381.  clr.b PLR2_Ducked
  1382.  clr.b p1_ducked
  1383.  clr.b p2_ducked
  1384.  
  1385. ********************************************
  1386.  
  1387. ;    jmp docredits
  1388.  
  1389. ********************************************
  1390.  
  1391.  
  1392.  st doanything
  1393.  st dosounds
  1394.  
  1395.  jsr CLRNASTYMEM
  1396.  
  1397.  move.l #COMPACTMAP,a0
  1398.  move.l a0,LASTZONE
  1399.  move.w #255,d0
  1400. .clrmap
  1401.  move.l #0,(a0)+
  1402.  dbra d0,.clrmap
  1403.  
  1404.  move.l #COMPACTMAP,a0
  1405.  move.l #BIGMAP,a1
  1406.  
  1407.  bra NOALLWALLS
  1408.  
  1409.  move.l ZoneGraphAdds,a2
  1410. DOALLWALLS:
  1411.  move.l (a2),d0
  1412.  beq.s nomorezones
  1413.  move.l d0,a3
  1414.  
  1415.  addq #8,a2
  1416.  
  1417.  add.l LEVELGRAPHICS,a3
  1418.  addq #2,a3
  1419.  move.l a1,a4
  1420.  
  1421. ; DOLOWERROOM
  1422.  
  1423. innerwalls:
  1424.  move.b (a3),d1
  1425.  move.b 1(a3),d0
  1426.  bne doneinner
  1427.  
  1428.  tst.b d1
  1429.  blt noid
  1430.  
  1431.  move.b d1,d3
  1432.  and.w #15,d1
  1433.  
  1434.  moveq #0,d0
  1435.  move.w d1,d2
  1436.  add.w d1,d1
  1437.  add.w d2,d1
  1438.  addq #1,d1
  1439.  bset d1,d0
  1440.  btst #4,d3
  1441.  beq.s .nodoor
  1442.  addq #1,d1
  1443.  bset d1,d0
  1444. .nodoor
  1445.  
  1446.  or.l d0,(a0)
  1447.  
  1448.  move.w 2(a3),(a4)
  1449.  move.w 4(a3),2(a4)
  1450.  
  1451. noid:
  1452.  
  1453.  add.w #30,a3
  1454.  addq #4,a4
  1455.  
  1456.  bra innerwalls
  1457.  
  1458. doneinner:
  1459.  
  1460.  add.w #40,a1
  1461.  addq #4,a0
  1462.  
  1463.  bra DOALLWALLS
  1464. nomorezones:
  1465.  
  1466. NOALLWALLS
  1467.  
  1468.  move.w #96,MIDDLEX
  1469.  move.w #192,RIGHTX
  1470.  move.w #160,BOTTOMY
  1471.  move.w #80,TOTHEMIDDLE
  1472.  clr.b FULLSCR
  1473. ; move.l scrn,a0
  1474. ; jsr WIPEDISPLAY
  1475. ; move.l scrn2,a0
  1476. ; jsr WIPEDISPLAY
  1477.  
  1478.  st PLAYERONEGUNS+1
  1479.  st PLAYERTWOGUNS+1
  1480.  
  1481.  move.w #100,timetodamage
  1482.  
  1483.  move.w #299,d0
  1484.  move.l #DAMAGED,a0
  1485. CLRDAM:
  1486.  move.w #0,(a0)+
  1487.  dbra d0,CLRDAM
  1488.  
  1489.  moveq #0,d0
  1490.  move.w d0,STOPOFFSET
  1491.  neg.w d0
  1492.  add.w TOTHEMIDDLE,d0
  1493.  move.w d0,SMIDDLEY
  1494.  asr.w #1,d0
  1495.  muls #104*4,d0
  1496.  move.l d0,SBIGMIDDLEY
  1497.  
  1498.  move.w #0,PLR1_AIMSPD
  1499.  move.w #0,PLR2_AIMSPD
  1500.  
  1501. ; move.l scrn,SCRNSHOWPT
  1502.  
  1503. ; move.l scrn2,SCRNDRAWPT
  1504.  
  1505.  move.w #%110000000000,$dff034
  1506.  
  1507.  
  1508. ; add.l #PALETTEBIT,d1
  1509. ; tst.l d0
  1510. ; beq.s nofadedownhc
  1511. ; sub.l #2116,d0
  1512. ; move.l d0,hitcol
  1513. ;nofadedownhc:
  1514. ;
  1515.  move.l #PALETTEBIT,a0
  1516.  move.l #PALETTESPACE,a1
  1517.  move.l #(2116/4)-2,d0
  1518. putinpal:
  1519.  move.l (a0)+,(a1)+
  1520.  dbra d0,putinpal
  1521.  
  1522.  
  1523.  move.w #4,WIDESCRN
  1524.  
  1525.  move.w #80,SMIDDLEY
  1526.  move.l #40*104*4,SBIGMIDDLEY
  1527.  move.w #0,STOPOFFSET
  1528.  move.w #80,MIDDLEY
  1529.  move.l #40*104*4,BIGMIDDLEY
  1530.  move.w #0,TOPOFFSET
  1531.  
  1532. lop:
  1533.  
  1534.  move.b MAPON,REALMAPON
  1535.  
  1536.  move.b FULLSCRTEMP,d0
  1537.  move.b FULLSCR,d1
  1538.  eor.b d1,d0
  1539.  beq.s .notswapscr2
  1540.  
  1541.  move.b FULLSCRTEMP,FULLSCR
  1542.  beq.s .notswapscr3
  1543.  
  1544.  move.w #144,MIDDLEX
  1545.  move.w #288,RIGHTX
  1546.  move.w #232,BOTTOMY
  1547.  move.w #120,TOTHEMIDDLE
  1548. ; move.l SCRNSHOWPT,a0
  1549. ; jsr WIPEDISPLAY
  1550. ; move.l SCRNDRAWPT,a0
  1551. ; jsr WIPEDISPLAY
  1552.  
  1553.  bra.s .notswapscr2
  1554.  
  1555. .notswapscr3:
  1556.  move.w #96,MIDDLEX
  1557.  move.w #192,RIGHTX
  1558.  move.w #160,BOTTOMY
  1559.  move.w #80,TOTHEMIDDLE
  1560. ; move.l SCRNSHOWPT,a0
  1561. ; jsr WIPEDISPLAY
  1562. ; move.l SCRNDRAWPT,a0
  1563. ; jsr WIPEDISPLAY
  1564. .notswapscr2:
  1565.  
  1566.  
  1567.  btst #6,$bfe001
  1568. ;charlie bne.b .nocop
  1569.  
  1570. ;charlie move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1571.  
  1572. .nocop
  1573.  
  1574.  move.l #KeyMap,a5
  1575.  
  1576.  cmp.b #'n',mors
  1577.  bne .nopause
  1578.  tst.b $19(a5)
  1579.  beq.s .nopause
  1580.  clr.b doanything
  1581.  
  1582. .waitrel:
  1583.  
  1584.  tst.b PLR1JOY
  1585.  beq.s .NOJOY
  1586.  jsr _ReadJoy1
  1587. .NOJOY
  1588.  
  1589.  tst.b $19(a5)
  1590.  bne.s .waitrel
  1591.  
  1592.  bsr PAUSEOPTS
  1593.  
  1594.  st doanything
  1595. .nopause: 
  1596.  
  1597.  move.w hitcol,d0
  1598.  beq.s nofadedownhc
  1599.  sub.w #$100,d0
  1600.  move.w d0,hitcol
  1601.  move.w d0,hitcol2
  1602. nofadedownhc:
  1603.  
  1604.  
  1605. ********************************************
  1606. * Remove after colour testing 
  1607. ; moveq #0,d1
  1608. ********************************************
  1609.  
  1610. ; add.l #PALETTEBIT,d1
  1611. ; tst.l d0
  1612. ; beq.s nofadedownhc
  1613. ; sub.l #2116,d0
  1614. ; move.l d0,hitcol
  1615. ;nofadedownhc:
  1616. ;
  1617. ; move.l d1,a0
  1618. ; move.l #PALETTESPACE,a1
  1619. ; move.l #(2116/4)-2,d0
  1620. ;putinpal:
  1621. ; move.l (a0)+,(a1)+
  1622. ; dbra d0,putinpal
  1623.  
  1624.  
  1625.  
  1626.  st READCONTROLS
  1627.  move.l #$dff000,a6
  1628.  
  1629.  
  1630.  cmp.b #'n',mors
  1631.  beq .nopause
  1632.  
  1633.  move.b SLAVEPAUSE,d0
  1634.  or.b MASTERPAUSE,d0
  1635.  beq.s .nopause
  1636.  clr.b doanything
  1637.  
  1638.  move.l #KeyMap,a5
  1639. .waitrel:
  1640.  
  1641.  cmp.b #'s',mors
  1642.  beq.s .RE2
  1643.  tst.b PLR1JOY
  1644.  beq.s .NOJOY
  1645.  jsr _ReadJoy1
  1646.  bra .RE1
  1647. .RE2:
  1648.  tst.b PLR2JOY
  1649.  beq.s .NOJOY
  1650.  jsr _ReadJoy2
  1651. .RE1
  1652. .NOJOY:
  1653.  tst.b $19(a5)
  1654.  bne.s .waitrel
  1655.  
  1656.  bsr PAUSEOPTS
  1657.  
  1658.  cmp.b #'m',mors
  1659.  bne.s .slavelast
  1660.  Jsr SENDFIRST
  1661.  bra .masfirst
  1662. .slavelast
  1663.  Jsr RECFIRST
  1664. .masfirst:
  1665.  clr.b SLAVEPAUSE
  1666.  clr.b MASTERPAUSE
  1667.  st doanything
  1668.  
  1669. .nopause: 
  1670.  
  1671.  
  1672.  move.l drawpt,d0
  1673.  move.l olddrawpt,drawpt
  1674.  move.l d0,olddrawpt
  1675.  
  1676. ; move.l SCRNDRAWPT,d0
  1677. ; move.l SCRNSHOWPT,SCRNDRAWPT
  1678. ; move.l d0,SCRNSHOWPT
  1679.  
  1680.  move.l d0,$dff084    
  1681.  move.l drawpt,a3
  1682. ; move.l COPSCRNBUFF,a3
  1683.  adda.w #10,a3
  1684.  move.l a3,frompt
  1685.  add.l #104*4*40,a3
  1686.  move.l a3,midpt
  1687.  
  1688.  cmp.b #'s',mors
  1689.  beq.s nowaitslave
  1690.  
  1691. waitfortop:
  1692.  
  1693.  btst.b #0,intreqrl(a6)
  1694.  beq.b waitfortop
  1695.  
  1696.  move.w #$1,intreq(a6)
  1697. ; move.l #PLR1_GunData,GunData
  1698.  move.b PLR1_GunSelected,GunSelected
  1699.  bra waitmaster
  1700.  
  1701. nowaitslave:
  1702. ; move.l #PLR2_GunData,GunData
  1703.  move.b PLR2_GunSelected,GunSelected
  1704. waitmaster:
  1705.  
  1706.  
  1707.  move.l #SMIDDLEY,a0
  1708.  movem.l (a0)+,d0/d1
  1709.  move.l d0,MIDDLEY
  1710.  move.l d1,MIDDLEY+4
  1711.  
  1712.  move.l waterpt,a0
  1713.  move.l (a0)+,watertouse
  1714.  cmp.l #endwaterlist,a0
  1715.  blt.s okwat
  1716.  move.l #waterlist,a0
  1717. okwat:
  1718.  move.l a0,waterpt
  1719.  
  1720.  add.w #640,wtan
  1721.  and.w #8191,wtan
  1722.  add.l #1,wateroff
  1723.  and.l #$3fff3fff,wateroff
  1724.  
  1725.  move.l PLR1_xoff,OLDX1
  1726.  move.l PLR1_zoff,OLDZ1
  1727.  move.l PLR2_xoff,OLDX2
  1728.  move.l PLR2_zoff,OLDZ2
  1729.  
  1730.  move.l #$dff000,a6
  1731.  
  1732.  cmp.b #'s',mors
  1733.  beq ASlaveShouldWaitOnHisMaster
  1734.  
  1735.  cmp.b #'n',mors
  1736.  bne NotOnePlayer
  1737.  
  1738.  movem.l d0-d7/a0-a6,-(a7)
  1739.  
  1740.  moveq #0,d0
  1741.  move.b GunSelected,d0
  1742.  move.l LINKFILE,a6
  1743.  add.l #GunBulletTypes,a6
  1744.  move.w (a6,d0.w*8),d0
  1745.  
  1746.  move.l #PLAYERONEAMMO,a6
  1747.  move.w (a6,d0.w*2),d0
  1748.  move.w d0,Ammo
  1749.  movem.l (a7)+,d0-d7/a0-a6
  1750.  
  1751.  move.w PLAYERONEHEALTH,Energy
  1752.  
  1753.  move.w FramesToDraw,TempFrames
  1754.  cmp.w #15,TempFrames
  1755.  blt.s .okframe
  1756.  move.w #15,TempFrames
  1757. .okframe:
  1758.  move.w #0,FramesToDraw
  1759.  
  1760. *********************************************
  1761. *********** TAKE THIS OUT *******************
  1762. *********************************************
  1763.  
  1764.  move.l CHEATPTR,a4
  1765.  add.l #200000,a4
  1766.  moveq #0,d0
  1767.  move.b (a4),d0
  1768.  
  1769.  move.l #KeyMap,a5
  1770.  tst.b (a5,d0.w)
  1771.  beq.s .nocheat
  1772.  
  1773.  addq #1,a4
  1774.  cmp.l #ENDCHEAT,a4
  1775.  blt.s .nocheat
  1776.  cmp.w #0,CHEATNUM
  1777.  beq.s .nocheat
  1778.  sub.w #1,CHEATNUM
  1779.  move.l #CHEATFRAME,a4
  1780.  move.w #127,PLR1_energy
  1781.  jsr EnergyBar
  1782. .nocheat
  1783.  
  1784.  sub.l #200000,a4
  1785.  move.l a4,CHEATPTR
  1786.  
  1787. **********************************************
  1788. **********************************************
  1789. **********************************************
  1790.  
  1791.  move.l PLR1s_xoff,p1_xoff
  1792.  move.l PLR1s_zoff,p1_zoff
  1793.  move.l PLR1s_yoff,p1_yoff
  1794.  move.l PLR1s_height,p1_height
  1795.  move.w PLR1s_angpos,p1_angpos
  1796.  move.w PLR1_bobble,p1_bobble
  1797.  move.b PLR1_clicked,p1_clicked
  1798.  move.b PLR1_fire,p1_fire
  1799.  clr.b PLR1_clicked
  1800.  move.b PLR1_SPCTAP,p1_spctap
  1801.  clr.b PLR1_SPCTAP
  1802.  move.b PLR1_Ducked,p1_ducked
  1803.  move.b PLR1_GunSelected,p1_gunselected
  1804.  
  1805.  bsr PLR1_Control
  1806.  
  1807.  move.l PLR1_Roompt,a0
  1808.  move.l ToZoneRoof(a0),SplitHeight
  1809.  move.w p1_xoff,THISPLRxoff
  1810.  move.w p1_zoff,THISPLRzoff
  1811.  
  1812.  
  1813.  move.l #$60000,p2_yoff
  1814.  move.l PLR2_Obj,a0
  1815.  move.w #-1,GraphicRoom(a0)
  1816.  move.w #-1,12(a0)
  1817.  move.b #0,17(a0)
  1818.  move.l #BollocksRoom,PLR2_Roompt
  1819.  
  1820.  bra donetalking
  1821.  
  1822. NotOnePlayer:
  1823.  move.l #KeyMap,a5
  1824.  tst.b $19(a5)
  1825.  sne MASTERPAUSE
  1826.  
  1827. *********************************
  1828.  move.w PLAYERONEHEALTH,Energy
  1829. ; change this back
  1830. *********************************
  1831.  movem.l d0-d7/a0-a6,-(a7)
  1832.  
  1833.  moveq #0,d0
  1834.  move.b GunSelected,d0
  1835.  move.l LINKFILE,a6
  1836.  add.l #GunBulletTypes,a6
  1837.  move.w (a6,d0.w*8),d0
  1838.  
  1839.  move.l #PLAYERONEAMMO,a6
  1840.  move.w (a6,d0.w*2),d0
  1841.  move.w d0,Ammo
  1842.  movem.l (a7)+,d0-d7/a0-a6
  1843.  
  1844.  jsr SENDFIRST
  1845.  
  1846.  move.w FramesToDraw,TempFrames
  1847.  cmp.w #15,TempFrames
  1848.  blt.s .okframe
  1849.  move.w #15,TempFrames
  1850. .okframe:
  1851.  move.w #0,FramesToDraw
  1852.  
  1853.  move.l PLR1s_xoff,p1_xoff
  1854.  move.l PLR1s_zoff,p1_zoff
  1855.  move.l PLR1s_yoff,p1_yoff
  1856.  move.l PLR1s_height,p1_height
  1857.  move.w PLR1s_angpos,p1_angpos
  1858.  move.w PLR1_bobble,p1_bobble
  1859.  move.b PLR1_clicked,p1_clicked
  1860.  clr.b PLR1_clicked
  1861.  move.b PLR1_fire,p1_fire
  1862.  move.b PLR1_SPCTAP,p1_spctap
  1863.  clr.b PLR1_SPCTAP
  1864.  move.b PLR1_Ducked,p1_ducked
  1865.  move.b PLR1_GunSelected,p1_gunselected
  1866.  
  1867.  move.l PLR1_AIMSPD,d0
  1868.  jsr SENDFIRST
  1869.  move.l d0,PLR2_AIMSPD
  1870.  
  1871.  move.l p1_xoff,d0
  1872.  jsr SENDFIRST
  1873.  move.l d0,p2_xoff
  1874.  
  1875.  move.l p1_zoff,d0
  1876.  jsr SENDFIRST
  1877.  move.l d0,p2_zoff 
  1878.  
  1879.  move.l p1_yoff,d0
  1880.  jsr SENDFIRST
  1881.  move.l d0,p2_yoff
  1882.   
  1883.  move.l p1_height,d0
  1884.  jsr SENDFIRST
  1885.  move.l d0,p2_height
  1886.  
  1887.  move.w p1_angpos,d0
  1888.  swap d0
  1889.  move.w p1_bobble,d0
  1890.  jsr SENDFIRST
  1891.  move.w d0,p2_bobble
  1892.  swap d0
  1893.  move.w d0,p2_angpos
  1894.  
  1895.  
  1896.  move.w TempFrames,d0
  1897.  swap d0
  1898.  move.b p1_spctap,d0
  1899.  lsl.w #8,d0
  1900.  move.b p1_clicked,d0
  1901.  jsr SENDFIRST
  1902.  move.b d0,p2_clicked
  1903.  lsr.w #8,d0
  1904.  move.b d0,p2_spctap
  1905.  
  1906.  
  1907.  move.w Rand1,d0
  1908.  swap d0
  1909.  move.b p1_ducked,d0
  1910.  lsl.w #8,d0
  1911.  move.b p1_gunselected,d0
  1912.  jsr SENDFIRST
  1913.  move.b d0,p2_gunselected
  1914.  lsr.w #8,d0
  1915.  move.b d0,p2_ducked
  1916.  
  1917.  move.b p1_fire,d0
  1918.  lsl.w #8,d0
  1919.  move.b MASTERQUITTING,d0
  1920.  or.b d0,SLAVEQUITTING
  1921.  swap d0
  1922.  move.b MASTERPAUSE,d0
  1923.  or.b d0,SLAVEPAUSE
  1924.  jsr SENDFIRST
  1925.  or.b d0,MASTERPAUSE
  1926.  or.b d0,SLAVEPAUSE
  1927.  swap d0
  1928.  or.b d0,SLAVEQUITTING
  1929.  or.b d0,MASTERQUITTING
  1930.  lsr.w #8,d0
  1931.  move.b d0,p2_fire
  1932.  
  1933.  bsr PLR1_Control
  1934.  bsr PLR2_Control
  1935.  move.l PLR1_Roompt,a0
  1936.  move.l ToZoneRoof(a0),SplitHeight
  1937.  move.w p1_xoff,THISPLRxoff
  1938.  move.w p1_zoff,THISPLRzoff
  1939.  
  1940.  bra donetalking
  1941.  
  1942. ASlaveShouldWaitOnHisMaster:
  1943.  
  1944.  move.l #KeyMap,a5
  1945.  tst.b $19(a5)
  1946.  sne SLAVEPAUSE
  1947.  
  1948.  movem.l d0-d7/a0-a6,-(a7)
  1949.  
  1950.  moveq #0,d0
  1951.  move.b GunSelected,d0
  1952.  move.l LINKFILE,a6
  1953.  add.l #GunBulletTypes,a6
  1954.  move.w (a6,d0.w*8),d0
  1955.  
  1956.  move.l #PLAYERTWOAMMO,a6
  1957.  move.w (a6,d0.w*2),d0
  1958.  move.w d0,Ammo
  1959.  movem.l (a7)+,d0-d7/a0-a6
  1960.  
  1961.  move.w PLAYERTWOHEALTH,Energy
  1962.  
  1963.  jsr RECFIRST
  1964.  
  1965.  move.l PLR2s_xoff,p2_xoff
  1966.  move.l PLR2s_zoff,p2_zoff
  1967.  move.l PLR2s_yoff,p2_yoff
  1968.  move.l PLR2s_height,p2_height
  1969.  move.w PLR2s_angpos,p2_angpos
  1970.  move.w PLR2_bobble,p2_bobble
  1971.  move.b PLR2_clicked,p2_clicked
  1972.  clr.b PLR2_clicked
  1973.  move.b PLR2_fire,p2_fire
  1974.  move.b PLR2_SPCTAP,p2_spctap
  1975.  clr.b PLR2_SPCTAP
  1976.  move.b PLR2_Ducked,p2_ducked
  1977.  move.b PLR2_GunSelected,p2_gunselected
  1978.  
  1979.  move.l PLR2_AIMSPD,d0
  1980.  jsr RECFIRST
  1981.  move.l d0,PLR1_AIMSPD
  1982.  
  1983.  move.l p2_xoff,d0
  1984.  jsr RECFIRST
  1985.  move.l d0,p1_xoff
  1986.  
  1987.  move.l p2_zoff,d0
  1988.  jsr RECFIRST
  1989.  move.l d0,p1_zoff
  1990.  
  1991.  move.l p2_yoff,d0
  1992.  jsr RECFIRST
  1993.  move.l d0,p1_yoff
  1994.  
  1995.  move.l p2_height,d0
  1996.  jsr RECFIRST
  1997.  move.l d0,p1_height
  1998.  
  1999.  move.w p2_angpos,d0
  2000.  swap d0
  2001.  move.w p2_bobble,d0
  2002.  jsr RECFIRST
  2003.  move.w d0,p1_bobble
  2004.  swap d0
  2005.  move.w d0,p1_angpos
  2006.  
  2007.  
  2008.  move.b p2_spctap,d0
  2009.  lsl.w #8,d0
  2010.  move.b p2_clicked,d0
  2011.  jsr RECFIRST
  2012.  move.b d0,p1_clicked
  2013.  lsr.w #8,d0
  2014.  move.b d0,p1_spctap
  2015.  swap d0
  2016.  move.w d0,TempFrames
  2017.  
  2018.  move.b p2_ducked,d0
  2019.  lsl.w #8,d0
  2020.  move.b p2_gunselected,d0
  2021.  jsr RECFIRST
  2022.  move.b d0,p1_gunselected
  2023.  lsr.w #8,d0
  2024.  move.b d0,p1_ducked
  2025.  swap d0
  2026.  move.w d0,Rand1
  2027.  
  2028.  move.b p2_fire,d0
  2029.  lsl.w #8,d0
  2030.  move.b SLAVEQUITTING,d0
  2031.  or.b d0,MASTERQUITTING
  2032.  swap d0
  2033.  move.b SLAVEPAUSE,d0
  2034.  or.b d0,MASTERPAUSE
  2035.  jsr RECFIRST
  2036.  or.b d0,MASTERPAUSE
  2037.  or.b d0,SLAVEPAUSE
  2038.  swap d0
  2039.  or.b d0,SLAVEQUITTING
  2040.  or.b d0,MASTERQUITTING
  2041.  lsr.w #8,d0
  2042.  move.b d0,p1_fire
  2043.  
  2044.  
  2045.  bsr PLR1_Control
  2046.  bsr PLR2_Control
  2047.  move.w p2_xoff,THISPLRxoff
  2048.  move.w p2_zoff,THISPLRzoff
  2049.  move.l PLR2_Roompt,a0
  2050.  move.l ToZoneRoof(a0),SplitHeight
  2051.  
  2052. donetalking:
  2053.  
  2054.  
  2055.  move.l #ZoneBrightTable,a1
  2056.  move.l ZoneAdds,a2
  2057.  move.l PLR2_ListOfGraphRooms,a0
  2058. ; move.l PLR2_PointsToRotatePtr,a5
  2059.  move.l a0,a5
  2060.  cmp.b #'s',mors
  2061.  beq.s doallz
  2062.  move.l PLR1_ListOfGraphRooms,a0
  2063. ; move.l PLR1_PointsToRotatePtr,a5
  2064.  move.l a0,a5 
  2065. doallz
  2066.  move.w (a0),d0
  2067.  blt.s doneallz
  2068.  add.w #8,a0
  2069.  
  2070.  move.l (a2,d0.w*4),a3
  2071.  add.l LEVELDATA,a3
  2072.  move.w ToZoneBrightness(a3),d2
  2073.  
  2074.  blt.s justbright
  2075.  move.w d2,d3
  2076.  lsr.w #8,d3
  2077.  tst.b d3
  2078.  beq.s justbright
  2079.  
  2080.  move.l #BrightAnimTable,a4
  2081.  move.w -2(a4,d3.w*2),d2
  2082.  
  2083. justbright:
  2084.  muls #32,d2
  2085.  divs #20,d2
  2086.  move.w d2,(a1,d0.w*4)
  2087.  
  2088.  move.w ToUpperBrightness(a3),d2
  2089.  
  2090.  blt.s justbright2
  2091.  move.w d2,d3
  2092.  lsr.w #8,d3
  2093.  tst.b d3
  2094.  beq.s justbright2
  2095.  
  2096.  move.l #BrightAnimTable,a4
  2097.  move.w -2(a4,d3.w*2),d2
  2098.  
  2099. justbright2:
  2100.  
  2101.  muls #32,d2
  2102.  divs #20,d2
  2103.  move.w d2,2(a1,d0.w*4)
  2104.  
  2105.  bra doallz
  2106.  
  2107. doneallz:
  2108.  
  2109.  move.l PointBrights,a2
  2110.  move.l #CurrentPointBrights,a3
  2111. justtheone:
  2112.  move.w (a5),d0
  2113.  blt whythehell
  2114.  addq #8,a5
  2115.  
  2116.  muls #40,d0
  2117.  
  2118.  move.w #39,d7
  2119.  
  2120. allinzone:
  2121.  move.w (a2,d0.w*2),d2
  2122.  
  2123.  tst.b d2
  2124.  blt.s .justbright
  2125.  move.w d2,d3
  2126.  lsr.w #8,d3
  2127.  tst.b d3
  2128.  beq.s .justbright
  2129.  
  2130.  move.w d3,d4
  2131.  and.w #$f,d3
  2132.  lsr.w #4,d4
  2133.  add.w #1,d4
  2134.  move.l #BrightAnimTable,a0
  2135.  move.w -2(a0,d3.w*2),d3
  2136.  ext.w d2
  2137.  sub.w d2,d3
  2138.  muls d4,d3
  2139.  asr.w #4,d3
  2140.  add.w d3,d2
  2141.  
  2142. .justbright:
  2143.  ext.w d2
  2144.  
  2145.  muls #31,d2
  2146.  divs #20,d2
  2147.  bge.s .itspos
  2148.  sub.w #600,d2
  2149. .itspos:
  2150.  add.w #300,d2
  2151.  
  2152.  move.w d2,(a3,d0.w*2)
  2153.  addq #1,d0
  2154.  dbra d7,allinzone
  2155.  
  2156.  bra justtheone
  2157.  
  2158. whythehell:
  2159.  
  2160.  move.l PLR1_Roompt,a0
  2161.  move.l #CurrentPointBrights,a1
  2162.  move.l ZoneBorderPts,a2
  2163.  move.w (a0),d0
  2164.  muls #10,d0
  2165.  lea (a2,d0.w*2),a2
  2166.  lea (a1,d0.w*8),a1
  2167.  
  2168.  moveq #9,d7
  2169.  moveq #0,d0
  2170.  moveq #0,d1
  2171. findaverage:
  2172.  tst.w (a2)+
  2173.  blt.s .foundaverage
  2174.  addq #1,d0
  2175.  move.w (a1)+,d2
  2176.  bge.s .okpos
  2177.  neg.w d2
  2178. .okpos:
  2179.  add.w d2,d1
  2180.  
  2181.  dbra d7,findaverage
  2182.  
  2183. .foundaverage:
  2184.  
  2185.  ext.l d1
  2186.  divs d0,d1
  2187.  sub.w #300,d1
  2188.  move.w d1,PLR1_RoomBright
  2189.  
  2190.  cmp.b #'n',mors
  2191.  beq nosee
  2192.  
  2193.  move.l PLR1_Roompt,FromRoom
  2194.  move.l PLR2_Roompt,ToRoom
  2195.  move.w p1_xoff,Viewerx
  2196.  move.w p1_zoff,Viewerz
  2197.  move.l p1_yoff,d0
  2198.  asr.l #7,d0
  2199.  move.w d0,Viewery
  2200.  move.w p2_xoff,Targetx
  2201.  move.w p2_zoff,Targetz
  2202.  move.l p2_yoff,d0
  2203.  asr.l #7,d0
  2204.  move.w d0,Targety
  2205.  move.b PLR1_StoodInTop,ViewerTop
  2206.  move.b PLR2_StoodInTop,TargetTop
  2207.  jsr CanItBeSeen
  2208.  
  2209.  move.l PLR1_Obj,a0
  2210.  move.b CanSee,d0
  2211.  and.b #2,d0
  2212.  move.b d0,17(a0)
  2213.  move.l PLR2_Obj,a0
  2214.  move.b CanSee,d0
  2215.  and.b #1,d0
  2216.  move.b d0,17(a0)
  2217.  
  2218. nosee:
  2219.  
  2220.  
  2221.  move.w TempFrames,d0
  2222.  add.w d0,p1_holddown
  2223.  cmp.w #30,p1_holddown
  2224.  blt.s oklength
  2225.  move.w #30,p1_holddown
  2226. oklength:
  2227.  
  2228.  tst.b p1_fire
  2229.  bne.s okstillheld
  2230.  sub.w d0,p1_holddown
  2231.  bge.s okstillheld
  2232.  move.w #0,p1_holddown
  2233.  
  2234. okstillheld:
  2235.  
  2236.  move.w TempFrames,d0
  2237.  add.w d0,p2_holddown
  2238.  
  2239.  cmp.w #30,p2_holddown
  2240.  blt.s oklength2
  2241.  move.w #30,p2_holddown
  2242. oklength2:
  2243.  
  2244.  
  2245.  tst.b p2_fire
  2246.  bne.s okstillheld2
  2247.  sub.w d0,p2_holddown
  2248.  bge.s okstillheld2
  2249.  move.w #0,p2_holddown
  2250. okstillheld2:
  2251.  
  2252. ***** CHECKING LIGHT *********
  2253.  
  2254. ; move.w #-20,d0
  2255. ; move.w PLR1_xoff,d1
  2256. ; move.w PLR1_zoff,d2
  2257. ; move.l PLR1_Roompt,a0
  2258. ; move.w (a0),d3
  2259. ; move.w PLR1_angpos,d4
  2260. ;
  2261. ; jsr BRIGHTENPOINTSANGLE
  2262.  
  2263. ******************************
  2264.  
  2265. ; move.l #PLR1_GunData,a1
  2266. ; move.w p1_holddown,d0
  2267. ; move.w #50,10+32*3(a1)
  2268. ; move.l #PLR2_GunData,a1
  2269. ; move.w p2_holddown,d0
  2270. ; move.w #50,10+32*3(a1)
  2271.  
  2272. ******************************************
  2273. ******************************************
  2274.  
  2275.  move.w TempFrames,d1
  2276.  bgt.s noze
  2277.  moveq #1,d1
  2278. noze:
  2279.  
  2280.  move.w PLR1_xoff,d0
  2281.  sub.w OLDX1,d0
  2282.  asl.w #4,d0
  2283.  ext.l d0
  2284.  divs d1,d0
  2285.  move.w d0,XDIFF1
  2286.  move.w PLR2_xoff,d0
  2287.  sub.w OLDX2,d0
  2288.  asl.w #4,d0
  2289.  ext.l d0
  2290.  divs d1,d0
  2291.  move.w d0,XDIFF2
  2292.  move.w PLR1_zoff,d0
  2293.  sub.w OLDZ1,d0
  2294.  asl.w #4,d0
  2295.  ext.l d0
  2296.  divs d1,d0
  2297.  move.w d0,ZDIFF1
  2298.  move.w PLR2_zoff,d0
  2299.  sub.w OLDZ2,d0
  2300.  asl.w #4,d0
  2301.  ext.l d0
  2302.  divs d1,d0
  2303.  move.w d0,ZDIFF2
  2304.  
  2305.  cmp.b #'s',mors
  2306.  beq.s ImPlayer2OhYesIAm
  2307.  bsr USEPLR1
  2308.  bra IWasPlayer1
  2309.  
  2310. ImPlayer2OhYesIAm:
  2311.  bsr USEPLR2
  2312. IWasPlayer1:
  2313.  
  2314.  
  2315.  cmp.b #'s',mors
  2316.  beq drawplayer2
  2317.  
  2318.  move.w #0,scaleval
  2319.  
  2320.  move.l PLR1_xoff,xoff
  2321.  move.l PLR1_yoff,yoff
  2322.  move.l PLR1_zoff,zoff
  2323.  move.w PLR1_angpos,angpos
  2324.  move.w PLR1_cosval,cosval
  2325.  move.w PLR1_sinval,sinval
  2326.  
  2327.  
  2328.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  2329.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  2330.  move.l PLR1_Roompt,Roompt
  2331.  
  2332.  move.l #KeyMap,a5
  2333.  moveq #0,d5
  2334.  move.b look_behind_key,d5
  2335.  tst.b (a5,d5.w)
  2336.  beq.s .nolookback
  2337.  
  2338.  move.l PLR1_Obj,a0
  2339.  move.w #-1,12+128(a0)
  2340.  
  2341.  eor.w #4096,angpos 
  2342.  neg.w cosval
  2343.  neg.w sinval
  2344. .nolookback:
  2345.  
  2346.  bsr OrderZones
  2347.  jsr objmoveanim
  2348.  jsr EnergyBar
  2349.  
  2350.  
  2351.  jsr AmmoBar
  2352.  
  2353. ;********************************************
  2354. ;************* Do reflection ****************
  2355. ;
  2356. ; move.l ListOfGraphRooms,a0
  2357. ; move.l ZoneAdds,a1
  2358. ;checkwaterheights
  2359. ; move.w (a0),d0
  2360. ; blt allzonesdone
  2361. ; addq #8,a0
  2362. ; move.l (a1,d0.w*4),a2
  2363. ; add.l LEVELDATA,a2
  2364. ; move.l ToZoneWater(a2),d0
  2365. ; cmp.l ToZoneFloor(a2),d0
  2366. ; blt.s WEHAVEAHEIGHT
  2367. ; bra.s checkwaterheights
  2368. ;
  2369. ;WEHAVEAHEIGHT:
  2370. ;
  2371. ; sub.l yoff,d0
  2372. ; blt.s underwater
  2373. ; add.l d0,d0
  2374. ; add.l d0,yoff
  2375. ; move.l FASTBUFFER2,FASTBUFFER
  2376. ; move.w #0,leftclip
  2377. ; move.w RIGHTX,rightclip
  2378. ; move.w #0,deftopclip
  2379. ; move.w #BOTTOMY/2,defbotclip
  2380. ; move.w #0,topclip
  2381. ; move.w #BOTTOMY/2,botclip
  2382. ;
  2383. ; clr.b DOANYWATER 
  2384. ; bsr DrawDisplay
  2385. ;allzonesdone:
  2386. ;underwater:
  2387.  
  2388. ********************************************
  2389.  
  2390.  st DOANYWATER
  2391.  
  2392.  move.l PLR1_yoff,yoff
  2393.  
  2394.  move.w #0,leftclip
  2395.  move.w RIGHTX,rightclip
  2396.  move.w #0,deftopclip
  2397.  move.w WIDESCRN,d0
  2398.  add.w d0,deftopclip
  2399.  
  2400.  move.w BOTTOMY,defbotclip
  2401.  sub.w d0,defbotclip
  2402.  move.w #0,topclip
  2403.  add.w d0,topclip
  2404.  move.w BOTTOMY,botclip
  2405.  sub.w d0,botclip
  2406. ; sub.l #10*104*4,frompt
  2407. ; sub.l #10*104*4,midpt
  2408.  
  2409. * Subroom loop
  2410.  
  2411.  bsr DrawDisplay 
  2412.  
  2413.  bra nodrawp2
  2414.  
  2415. drawplayer2
  2416.  
  2417.  move.w #0,scaleval
  2418.  move.l PLR2_xoff,xoff
  2419.  move.l PLR2_yoff,yoff
  2420.  move.l PLR2_zoff,zoff
  2421.  move.w PLR2_angpos,angpos
  2422.  move.w PLR2_cosval,cosval
  2423.  move.w PLR2_sinval,sinval 
  2424.  
  2425.  
  2426.  
  2427.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  2428.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  2429.  move.l PLR2_Roompt,Roompt
  2430.  
  2431.  move.l #KeyMap,a5
  2432.  moveq #0,d5
  2433.  move.b look_behind_key,d5
  2434.  tst.b (a5,d5.w)
  2435.  beq.s .nolookback
  2436.  
  2437.  move.l PLR1_Obj,a0
  2438.  move.w #-1,12+128(a0)
  2439.  eor.w #4096,angpos 
  2440.  
  2441.  neg.w cosval
  2442.  neg.w sinval
  2443. .nolookback:
  2444.  
  2445.  bsr OrderZones
  2446.  jsr objmoveanim
  2447.  jsr EnergyBar
  2448.  jsr AmmoBar
  2449.  
  2450.  move.w WIDESCRN,d0
  2451.  
  2452.  move.w #0,leftclip
  2453.  move.w RIGHTX,rightclip
  2454.  move.w #0,deftopclip
  2455.  add.w d0,deftopclip
  2456.  move.w BOTTOMY,defbotclip
  2457.  sub.w d0,defbotclip
  2458.  move.w #0,topclip
  2459.  add.w d0,topclip
  2460.  move.w BOTTOMY,botclip
  2461.  sub.w d0,botclip
  2462.  
  2463.  bsr DrawDisplay
  2464.  
  2465. nodrawp2:
  2466.  
  2467. ***************************************** 
  2468. * Copy from copbuff to chip ram
  2469.  
  2470.  
  2471. ; move.l drawpt,a3
  2472. ; adda.w #10,a3
  2473. ; move.l COPSCRNBUFF,a2
  2474. ; move.w #2,d6
  2475. ; adda.w #10,a2
  2476. ;COPYOUT
  2477. ; move.w #31,d0
  2478. ;COPYDOWN1:
  2479. ; move.w #3,d1
  2480. ; move.l a2,a4
  2481. ; move.l a3,a5
  2482. ;.inlop1:
  2483. ;val SET 0
  2484. ; REPT 20
  2485. ; move.w val(a4),val(a5)
  2486. ;val SET val+104*4
  2487. ; ENDR
  2488. ; adda.l #104*4*20,a4
  2489. ; adda.l #104*4*20,a5
  2490. ; dbra d1,.inlop1
  2491. ; addq #4,a2
  2492. ; addq #4,a3
  2493. ; dbra d0,COPYDOWN1
  2494. ; addq #4,a2
  2495. ; addq #4,a3
  2496. ; dbra d6,COPYOUT 
  2497.  
  2498.  tst.b REALMAPON
  2499.  beq.s .nomap
  2500.  bsr DoTheMapWotNastyCharlesIsForcingMeToDo
  2501. .nomap
  2502.  
  2503.  move.w WIDESCRN,d7
  2504.  
  2505.  move.l #KeyMap,a5
  2506.  tst.b $4a(a5)
  2507.  beq .nosmallscr
  2508.  
  2509.  move.l #0,d7
  2510.  move.l #0,d6
  2511.  tst.b FULLSCR
  2512.  bne.s .attop
  2513.  move.l #40*20,d7
  2514.  move.l #40*52,d6
  2515. .attop:
  2516.  
  2517. ; move.w WIDESCRN,d0
  2518. ; move.l SCRNDRAWPT,a0
  2519. ; add.l d7,a0
  2520. ; muls #40,d0
  2521. ; add.l d0,a0
  2522. ; bsr CLRTWOLINES
  2523. ; move.w WIDESCRN,d0
  2524. ; move.l SCRNSHOWPT,a0
  2525. ; add.l d7,a0
  2526. ; muls #40,d0
  2527. ; add.l d0,a0
  2528. ; bsr CLRTWOLINES
  2529.  
  2530. ; add.w #2,WIDESCRN
  2531. ;
  2532. ; move.l SCRNDRAWPT,a0
  2533. ; add.l #232*40,a0
  2534. ; sub.l d6,a0
  2535. ; move.w WIDESCRN,d0
  2536. ; muls #40,d0
  2537. ; sub.l d0,a0
  2538. ; bsr CLRTWOLINES
  2539. ; move.l SCRNSHOWPT,a0
  2540. ; sub.l d6,a0
  2541. ; add.l #232*40,a0
  2542. ; move.w WIDESCRN,d0
  2543. ; muls #40,d0
  2544. ; sub.l d0,a0
  2545. ; bsr CLRTWOLINES
  2546.  
  2547. .nosmallscr
  2548.  
  2549.  tst.b $5e(a5)
  2550.  beq.s .nobigscr
  2551.  tst.w WIDESCRN
  2552.  ble.s .nobigscr
  2553.  
  2554.  sub.w #2,WIDESCRN
  2555.  
  2556. .nobigscr
  2557.  
  2558.  
  2559.  tst.b (a5)
  2560.  beq.s .nosavescrn
  2561.  
  2562.  not.b USEDOUG
  2563.  
  2564.  jsr SAVETHESCREEN
  2565.  
  2566. .nosavescrn:
  2567.  
  2568. ; tst.b $5b(a5)
  2569. ; beq notdoubheight
  2570. ; tst.b LASTDH
  2571. ; bne notdoubheight2
  2572. ; move.l SCRNSHOWPT,a0
  2573. ; jsr WIPEDISPLAY
  2574. ; move.l SCRNDRAWPT,a0
  2575. ; jsr WIPEDISPLAY
  2576. ; st LASTDH 
  2577. ;; move.w #0,d0
  2578. ; move.w #0,d1
  2579. ; not.b DOUBLEHEIGHT
  2580. ; beq.s singlepixheight
  2581. ; move.w #-40,d0
  2582. ; move.w #40,d1
  2583. ;singlepixheight:
  2584. ;
  2585. ; move.l #SCRMODULOS,a0
  2586. ; move.w #115,d2
  2587. ;putinmode:
  2588. ; move.w d0,6(a0)
  2589. ; move.w d0,6+4(a0)
  2590. ; move.w d1,6+16(a0)
  2591. ; move.w d1,6+16+4(a0)
  2592. ; add.w #32,a0
  2593. ; dbra d2,putinmode
  2594. ;
  2595. ; bra notdoubheight2
  2596. ;notdoubheight:
  2597. ; clr.b LASTDH
  2598. ;notdoubheight2
  2599.  
  2600. ; tst.b $5a(a5)
  2601. ; beq.s notdoubwidth
  2602. ; tst.b LASTDW
  2603. ; bne notdoubwidth2
  2604. ; move.l SCRNSHOWPT,a0
  2605. ; jsr WIPEDISPLAY
  2606. ; move.l SCRNDRAWPT,a0
  2607. ; jsr WIPEDISPLAY
  2608. ; st LASTDW
  2609. ; not.b DOUBLEWIDTH
  2610. ; bra.s notdoubwidth2
  2611. ;notdoubwidth:
  2612. ; clr.b LASTDW
  2613. ;notdoubwidth2:
  2614. ***************************************** 
  2615.  move.l PLR2_Roompt,a0
  2616.  move.l #WorkSpace,a1
  2617.  clr.l (a1)
  2618.  clr.l 4(a1)
  2619.  clr.l 8(a1)
  2620.  clr.l 12(a1)
  2621.  clr.l 16(a1)
  2622.  clr.l 20(a1)
  2623.  clr.l 24(a1)
  2624.  clr.l 28(a1)
  2625.  
  2626.  cmp.b #'n',mors
  2627.  beq.s plr1only
  2628.  
  2629.  lea ToListOfGraph(a0),a0
  2630. .doallrooms:
  2631.  move.w (a0),d0
  2632.  blt.s .allroomsdone
  2633.  addq #8,a0
  2634.  move.w d0,d1
  2635.  asr.w #3,d0
  2636.  bset d1,(a1,d0.w)
  2637.  bra .doallrooms
  2638. .allroomsdone:
  2639.  
  2640. plr1only:
  2641.  
  2642.  move.l PLR1_Roompt,a0
  2643.  lea ToListOfGraph(a0),a0
  2644. .doallrooms2:
  2645.  move.w (a0),d0
  2646.  blt.s .allroomsdone2
  2647.  addq #8,a0
  2648.  move.w d0,d1
  2649.  asr.w #3,d0
  2650.  bset d1,(a1,d0.w)
  2651.  bra .doallrooms2
  2652. .allroomsdone2:
  2653.  
  2654.  move.l #%000001,d7
  2655.  lea TEAMWORK,a2
  2656.  move.l ObjectData,a0
  2657.  sub.w #64,a0
  2658. .doallobs:
  2659.  add.w #64,a0
  2660.  move.w (a0),d0
  2661.  blt.s .allobsdone
  2662.  move.w 12(a0),d0
  2663.  blt.s .doallobs
  2664.  move.w d0,d1
  2665.  asr.w #3,d0
  2666.  btst d1,(a1,d0.w)
  2667.  bne.s .worryobj
  2668.  move.b 16(a0),d0
  2669.  btst d0,d7
  2670.  beq.s .doallobs
  2671.  moveq #0,d0
  2672.  move.b teamnumber(a0),d0
  2673.  blt.s .doallobs
  2674.  asl.w #4,d0
  2675.  tst.w SEENBY(a2,d0.w)
  2676.  blt.s .doallobs
  2677. .worryobj:
  2678.  or.b #127,worry(a0)
  2679.  bra.s .doallobs
  2680. .allobsdone:
  2681.  
  2682.  
  2683.  
  2684. ; move.l #brightentab,a0
  2685. ; move.l frompt,a3
  2686. ; adda.w #(4*33)+(104*4*20),a3
  2687. ; move.w #20,d7
  2688. ; move.w #20,d6
  2689. ;horl:
  2690. ; move.w d6,d5
  2691. ; move.l a3,a1
  2692. ;vertl
  2693. ; move.w (a1),d0
  2694. ; move.w (a0,d0.w*2),(a1)
  2695. ; addq #4,a1
  2696. ; dbra d5,vertl
  2697. ; adda.w #104*4,a3
  2698. ; dbra d7,horl
  2699.  
  2700.  move.l #$dff000,a6
  2701.  
  2702. ; move.w #$300,col0(a6)
  2703.  
  2704.  move.l #KeyMap,a5
  2705.  tst.b $45(a5)
  2706.  beq.s noend
  2707.  
  2708.  cmp.b #'s',mors
  2709.  beq plr2quit 
  2710.  
  2711.  st MASTERQUITTING
  2712.  bra noend
  2713.  
  2714. plr2quit:
  2715.  st SLAVEQUITTING
  2716. noend:
  2717.  
  2718.  tst.b MASTERQUITTING
  2719.  beq.s .noquit
  2720.  tst.b SLAVEQUITTING
  2721.  beq.s .noquit
  2722.  jmp endnomusic
  2723. .noquit
  2724.  
  2725.  cmp.b #'n',mors
  2726.  bne.s noexit
  2727.  move.l PLR1_Roompt,a0
  2728.  move.w (a0),d0
  2729. ; move.w PLOPT,d1
  2730. ; move.l #ENDZONES,a0
  2731. ; cmp.w (a0,d1.w*2),d0
  2732.  
  2733.  cmp.w ENDZONE,d0
  2734.  
  2735. ; change this for quick exit, charlie
  2736. zzzz:
  2737. ; bra end
  2738.  
  2739.  bne.s noexit
  2740.  jmp end
  2741. noexit:
  2742.  
  2743. ; tst.w PLAYERONEHEALTH
  2744. ; bgt nnoend1
  2745. ; jmp end
  2746. ;nnoend1:
  2747. ; tst.w PLAYERTWOHEALTH
  2748. ; bgt nnoend2
  2749. ; jmp end
  2750. ;nnoend2:
  2751.  
  2752. ; move.l SwitchData,a0
  2753. ; tst.b 24+8(a0)
  2754. ; bne end
  2755.   
  2756. ; JSR STOPTIMER
  2757.  
  2758.  
  2759.  bra lop
  2760.  
  2761.  include "ab3:CHEESESAUCE/ab3diipatchidr.s"
  2762.  
  2763. CLRTWOLINES:
  2764.  
  2765.  moveq #0,d1
  2766.  move.w #7,d2
  2767. .ccc
  2768.  move.l d1,2(a0)
  2769.  move.l d1,6(a0)
  2770.  move.l d1,10(a0)
  2771.  move.l d1,14(a0)
  2772.  move.l d1,18(a0)
  2773.  move.l d1,22(a0)
  2774.  move.l d1,26(a0)
  2775.  move.l d1,30(a0)
  2776.  move.l d1,34(a0)
  2777.  move.l d1,2+40(a0)
  2778.  move.l d1,6+40(a0)
  2779.  move.l d1,10+40(a0)
  2780.  move.l d1,14+40(a0)
  2781.  move.l d1,18+40(a0)
  2782.  move.l d1,22+40(a0)
  2783.  move.l d1,26+40(a0)
  2784.  move.l d1,30+40(a0)
  2785.  move.l d1,34+40(a0)
  2786.  add.l #10240,a0
  2787.  dbra d2,.ccc
  2788.  rts
  2789.  
  2790.  
  2791. LASTDH: dc.b 0
  2792. LASTDW: dc.b 0
  2793. WIDESCRN: dc.w 0
  2794. TRRANS: dc.w 0
  2795. DOANYWATER: dc.w 0
  2796.  
  2797. DoTheMapWotNastyCharlesIsForcingMeToDo:
  2798.  
  2799.  move.l #SHADINGTABLE,a4
  2800. ; add.w MAPBRIGHT,a4
  2801.  
  2802.  move.l #KeyMap,a5
  2803.  tst.b $50(a5)
  2804.  beq.s .nobrighter
  2805.  tst.w MAPBRIGHT
  2806.  beq.s .nobrighter
  2807.  
  2808.  sub.w #1,MAPBRIGHT
  2809.  
  2810. .nobrighter:
  2811.  
  2812.  tst.b $51(a5)
  2813.  beq.s .nodimmer
  2814.  cmp.w #7,MAPBRIGHT
  2815.  bge.s .nodimmer
  2816.  
  2817.  add.w #1,MAPBRIGHT
  2818.  
  2819. .nodimmer:
  2820.  
  2821.  move.l #Rotated,a1
  2822.  move.l #COMPACTMAP,a2
  2823.  move.l #BIGMAP-40,a3
  2824.  
  2825. preshow:
  2826.  add.w #40,a3
  2827.  
  2828. SHOWMAP:
  2829.  move.l (a2)+,d5
  2830.  move.l a2,d7
  2831.  cmp.l LASTZONE,d7
  2832.  bgt shownmap
  2833.  
  2834.  tst.l d5
  2835.  beq.s preshow
  2836.  
  2837.  move.w #9,d7
  2838. wallsofzone
  2839.  
  2840.  asr.l #1,d5
  2841.  bcs.s WALLSEEN
  2842.  
  2843.  asr.l #1,d5
  2844.  bcs.s WALLMAPPED
  2845.  
  2846.  asr.l #1,d5
  2847.  addq #4,a3
  2848.  bra.s DECIDEDWALL
  2849.  
  2850. WALLMAPPED:
  2851.  move.w #$b00,d4
  2852.  asr.l #1,d5
  2853.  bcc.s .notadoor
  2854.  move.w #$e00,d4
  2855. .notadoor
  2856.  
  2857.  st TRRANS
  2858.  
  2859.  bra.s DECIDEDCOLOUR
  2860.  
  2861. WALLSEEN:
  2862.  
  2863.  clr.b TRRANS
  2864.  
  2865.  move.w #255,d4
  2866.  asr.l #2,d5
  2867.  bcc.s .notadoor
  2868.  move.w #254,d4
  2869. .notadoor
  2870. DECIDEDCOLOUR:
  2871.  move.w (a3)+,d6
  2872.  move.l (a1,d6.w*8),d0
  2873.  asr.l #7,d0
  2874.  add.w mapxoff,d0
  2875.  move.w 6(a1,d6.w*8),d1
  2876.  add.w mapzoff,d1
  2877.  move.w (a3)+,d6
  2878.  move.l (a1,d6.w*8),d2
  2879.  asr.l #7,d2
  2880.  add.w mapxoff,d2
  2881.  move.w 6(a1,d6.w*8),d3
  2882.  add.w mapzoff,d3
  2883.  
  2884.  neg.w d1
  2885.  neg.w d3
  2886.  
  2887.  movem.l d7/d5,-(a7)
  2888.  bsr CLIPANDDRAW
  2889.  movem.l (a7)+,d7/d5
  2890.  
  2891. DECIDEDWALL:
  2892.  
  2893.  dbra d7,wallsofzone
  2894.  bra SHOWMAP
  2895.  
  2896. shownmap:
  2897.  
  2898.  clr.b TRRANS
  2899.  
  2900.  move.w mapxoff,d0
  2901.  move.w mapzoff,d1
  2902.  neg.w d1
  2903.  move.w d0,d2
  2904.  move.w d1,d3
  2905.  sub.w #128,d1
  2906.  add.w #128,d3
  2907.  move.w #250,d4
  2908.  bsr CLIPANDDRAW
  2909.  
  2910.  move.w mapxoff,d0
  2911.  move.w mapzoff,d1
  2912.  neg.w d1
  2913.  move.w d0,d2
  2914.  move.w d1,d3
  2915.  sub.w #128,d1
  2916.  sub.w #32,d3
  2917.  sub.w #64,d2
  2918.  move.w #250,d4
  2919.  bsr CLIPANDDRAW
  2920.  
  2921.  move.w mapxoff,d0
  2922.  move.w mapzoff,d1
  2923.  neg.w d1
  2924.  move.w d0,d2
  2925.  move.w d1,d3
  2926.  sub.w #128,d1
  2927.  sub.w #32,d3
  2928.  add.w #64,d2
  2929.  move.w #250,d4
  2930.  bsr CLIPANDDRAW
  2931.  rts
  2932.  
  2933.  
  2934. CLIPANDDRAW:
  2935.  
  2936.  tst.b FULLSCR
  2937.  beq.s .nodov
  2938.  
  2939.  add.w d0,d0
  2940.  add.w d2,d2
  2941.  ext.l d0
  2942.  ext.l d2
  2943.  divs #3,d0
  2944.  divs #3,d2
  2945.  
  2946. .nodov:
  2947.  
  2948.  move.w MAPBRIGHT,d5
  2949.  asr.w d5,d0
  2950.  asr.w d5,d1
  2951.  asr.w d5,d2
  2952.  asr.w d5,d3
  2953.  
  2954. NOSCALING:
  2955.  add.w #96,d0
  2956.  bge p1xpos
  2957.  
  2958.  add.w #96,d2
  2959.  blt OFFSCREEN
  2960.  
  2961. x1nx2p:
  2962.  
  2963.  move.w d3,d5
  2964.  sub.w d1,d5
  2965.  move.w d2,d6
  2966.  sub.w d0,d6
  2967.  beq OFFSCREEN
  2968.  
  2969.  muls d0,d5
  2970.  divs d6,d5
  2971.  sub.w d5,d1
  2972.  move.w #0,d0
  2973.  
  2974.  bra doneleftclip
  2975.  
  2976. p1xpos:
  2977.  
  2978.  add.w #96,d2
  2979.  bge doneleftclip
  2980.  
  2981.  move.w d1,d5
  2982.  sub.w d3,d5
  2983.  move.w d0,d6
  2984.  sub.w d2,d6
  2985.  beq OFFSCREEN
  2986.  
  2987.  muls d2,d5
  2988.  divs d6,d5
  2989.  sub.w d5,d3
  2990.  move.w #0,d2
  2991.  
  2992. doneleftclip:
  2993.  
  2994.  cmp.w #191,d0
  2995.  ble p1xneg
  2996.  
  2997.  cmp.w #191,d2
  2998.  bgt OFFSCREEN
  2999.  
  3000.  move.w d0,d6
  3001.  sub.w d2,d6
  3002.  beq OFFSCREEN
  3003.  sub.w #191,d0
  3004.  move.w d3,d5
  3005.  sub.w d1,d5
  3006.  
  3007.  muls d5,d0
  3008.  divs d6,d0
  3009.  add.w d0,d1
  3010.  move.w #191,d0
  3011.  
  3012.  bra donerightclip
  3013.  
  3014. p1xneg:
  3015.  
  3016.  cmp.w #191,d2
  3017.  ble donerightclip
  3018.  
  3019.  move.w d2,d6
  3020.  sub.w d0,d6
  3021.  beq OFFSCREEN
  3022.  sub.w #191,d2
  3023.  move.w d1,d5
  3024.  sub.w d3,d5
  3025.  
  3026.  muls d5,d2
  3027.  divs d6,d2
  3028.  add.w d2,d3
  3029.  move.w #191,d2
  3030.  
  3031. donerightclip:
  3032.  
  3033. *********************************
  3034.  
  3035.  add.w #80,d1
  3036.  bge p1ypos
  3037.  
  3038.  add.w #80,d3
  3039.  blt OFFSCREEN
  3040.  
  3041.  move.w d2,d5
  3042.  sub.w d0,d5
  3043.  move.w d3,d6
  3044.  sub.w d1,d6
  3045.  beq OFFSCREEN
  3046.  
  3047.  muls d1,d5
  3048.  divs d6,d5
  3049.  sub.w d5,d0
  3050.  move.w #0,d1
  3051.  
  3052.  bra donetopclip
  3053.  
  3054. p1ypos:
  3055.  
  3056.  add.w #80,d3
  3057.  bge donetopclip
  3058.  
  3059.  move.w d0,d5
  3060.  sub.w d2,d5
  3061.  move.w d1,d6
  3062.  sub.w d3,d6
  3063.  beq OFFSCREEN
  3064.  
  3065.  muls d3,d5
  3066.  divs d6,d5
  3067.  sub.w d5,d2
  3068.  move.w #0,d3
  3069.  
  3070. donetopclip:
  3071.  
  3072.  cmp.w #159,d1
  3073.  ble p1yneg
  3074.  
  3075.  cmp.w #159,d3
  3076.  bgt OFFSCREEN
  3077.  
  3078.  move.w d1,d6
  3079.  sub.w d3,d6
  3080.  beq OFFSCREEN
  3081.  sub.w #159,d1
  3082.  move.w d2,d5
  3083.  sub.w d0,d5
  3084.  
  3085.  muls d5,d1
  3086.  divs d6,d1
  3087.  add.w d1,d0
  3088.  move.w #159,d1
  3089.  
  3090.  bra donebotclip
  3091.  
  3092. p1yneg:
  3093.  
  3094.  cmp.w #159,d3
  3095.  ble donebotclip
  3096.  
  3097.  move.w d3,d6
  3098.  sub.w d1,d6
  3099.  beq OFFSCREEN
  3100.  sub.w #159,d3
  3101.  move.w d0,d5
  3102.  sub.w d2,d5
  3103.  
  3104.  muls d5,d3
  3105.  divs d6,d3
  3106.  add.w d3,d2
  3107.  move.w #159,d3
  3108.  
  3109. donebotclip:
  3110.  
  3111.  tst.b TRRANS
  3112.  bne DRAWAtransLINE
  3113.  bra DRAWAMAPLINE
  3114.  
  3115. OFFSCREEN:
  3116. NOLINEtrans:
  3117.  rts
  3118.  
  3119. MAPBRIGHT:
  3120.  dc.w 3
  3121. mapxoff: dc.w 0
  3122. mapzoff: dc.w 0
  3123.  
  3124. DRAWAtransLINE:
  3125.  
  3126.  move.l FASTBUFFER,a0    ; screen to render to.
  3127.  
  3128.  tst.b FULLSCR
  3129.  beq.s .nooffset
  3130.   
  3131.  add.l #(320*40)+(48*2),a0
  3132.   
  3133. .nooffset:
  3134.  
  3135.  cmp.w d1,d3
  3136.  bgt.s .okdown
  3137.  bne.s .aline
  3138.  cmp.w d0,d2
  3139.  beq.s NOLINEtrans 
  3140. .aline
  3141.  exg d0,d2
  3142.  exg d1,d3
  3143. .okdown
  3144.  
  3145.  move.w d1,d5
  3146.  muls #320,d5
  3147.  add.l d5,a0
  3148.  lea (a0,d0.w*2),a0
  3149.  
  3150.  sub.w d1,d3
  3151.  
  3152.  sub.w d0,d2
  3153.  bge.s downrighttrans
  3154.  
  3155. downlefttrans:
  3156.  neg.w d2
  3157.  cmp.w d2,d3
  3158.  bgt.s downmorelefttrans
  3159.  
  3160. downleftmoretrans:
  3161.  move.w #320,d6
  3162.  move.w d2,d0
  3163.  move.w d2,d7
  3164.  
  3165. .linelop:
  3166.  move.b (a0),d4
  3167.  move.b (a4,d4.w*2),(a0)
  3168.  subq #1,a0
  3169.  sub.w d3,d0
  3170.  bgt.s .noextra
  3171.  add.w d2,d0
  3172.  add.w d6,a0
  3173. .noextra:
  3174.  dbra d7,.linelop
  3175.  rts
  3176.  
  3177. downmorelefttrans:
  3178.  move.w #320,d6
  3179.  move.w d3,d0
  3180.  move.w d3,d7
  3181.  
  3182. .linelop:
  3183.  move.b (a0),d4
  3184.  move.b (a4,d4.w*2),(a0)
  3185.  add.w d6,a0
  3186.  sub.w d2,d0
  3187.  bgt.s .noextra
  3188.  add.w d3,d0
  3189.  subq #1,a0
  3190. .noextra:
  3191.  dbra d7,.linelop
  3192.  
  3193.  rts
  3194.  
  3195. downrighttrans:
  3196.  
  3197.  cmp.w d2,d3
  3198.  bgt.s downmorerighttrans
  3199.  
  3200. downrightmoretrans:
  3201.  move.w #320,d6
  3202.  move.w d2,d0
  3203.  move.w d2,d7
  3204.  
  3205. .linelop:
  3206.  move.b (a0),d4
  3207.  move.b (a4,d4.w*2),(a0)+
  3208.  sub.w d3,d0
  3209.  bgt.s .noextra
  3210.  add.w d2,d0
  3211.  add.w d6,a0
  3212. .noextra:
  3213.  dbra d7,.linelop
  3214.  
  3215.  rts
  3216.  
  3217. downmorerighttrans:
  3218.  move.w #320,d6
  3219.  move.w d3,d0
  3220.  move.w d3,d7
  3221.  
  3222. .linelop:
  3223.  move.b (a0),d4
  3224.  move.b (a4,d4.w*2),(a0)
  3225.  add.w d6,a0
  3226.  sub.w d2,d0
  3227.  bgt.s .noextra
  3228.  add.w d3,d0
  3229.  addq #1,a0
  3230. .noextra:
  3231.  dbra d7,.linelop
  3232.  
  3233.  rts
  3234.  
  3235. NOLINE:
  3236.  rts
  3237.  
  3238. DRAWAMAPLINE:
  3239.  
  3240.  
  3241.  move.l FASTBUFFER,a0    ; screen to render to.
  3242.  cmp.w d1,d3
  3243.  bgt.s .okdown
  3244.  bne.s .aline
  3245.  cmp.w d0,d2
  3246.  beq.s NOLINE 
  3247. .aline
  3248.  exg d0,d2
  3249.  exg d1,d3
  3250. .okdown
  3251.  
  3252.  move.w d1,d5
  3253.  muls #320,d5
  3254.  add.l d5,a0
  3255.  lea (a0,d0.w),a0
  3256.  
  3257.  sub.w d1,d3
  3258.  
  3259.  sub.w d0,d2
  3260.  bge.s downright
  3261.  
  3262. downleft:
  3263.  neg.w d2
  3264.  cmp.w d2,d3
  3265.  bgt.s downmoreleft
  3266.  
  3267. downleftmore:
  3268.  move.w #320,d6
  3269.  move.w d2,d0
  3270.  move.w d2,d7
  3271.  addq #1,a0
  3272.  
  3273. .linelop:
  3274.  move.b d4,-(a0)
  3275.  sub.w d3,d0
  3276.  bgt.s .noextra
  3277.  add.w d2,d0
  3278.  add.w d6,a0
  3279. .noextra:
  3280.  dbra d7,.linelop
  3281.  rts
  3282.  
  3283. downmoreleft:
  3284.  move.w #320,d6
  3285.  move.w d3,d0
  3286.  move.w d3,d7
  3287.  
  3288. .linelop:
  3289.  move.b d4,(a0)
  3290.  add.w d6,a0
  3291.  sub.w d2,d0
  3292.  bgt.s .noextra
  3293.  add.w d3,d0
  3294.  subq #1,a0
  3295. .noextra:
  3296.  dbra d7,.linelop
  3297.  
  3298.  rts
  3299.  
  3300. downright:
  3301.  
  3302.  cmp.w d2,d3
  3303.  bgt.s downmoreright
  3304.  
  3305. downrightmore:
  3306.  move.w #320,d6
  3307.  move.w d2,d0
  3308.  move.w d2,d7
  3309.  
  3310. .linelop:
  3311.  move.b d4,(a0)+
  3312.  sub.w d3,d0
  3313.  bgt.s .noextra
  3314.  add.w d2,d0
  3315.  add.w d6,a0
  3316. .noextra:
  3317.  dbra d7,.linelop
  3318.  
  3319.  rts
  3320.  
  3321. downmoreright:
  3322.  move.w #320,d6
  3323.  move.w d3,d0
  3324.  move.w d3,d7
  3325.  
  3326. .linelop:
  3327.  move.b d4,(a0)
  3328.  add.w d6,a0
  3329.  sub.w d2,d0
  3330.  bgt.s .noextra
  3331.  add.w d3,d0
  3332.  addq #1,a0
  3333. .noextra:
  3334.  dbra d7,.linelop
  3335.  
  3336.  rts
  3337.  
  3338. SAVETHESCREEN:
  3339.  
  3340.  move.l old,$dff080
  3341.  move.w #$8020,$dff000+intena
  3342.  
  3343.  move.l _IntuitionBase,a6
  3344.  jsr _LVORethinkDisplay(a6)
  3345.  
  3346.  move.l doslib,a6
  3347.  move.l #SAVENAME,d1
  3348.  move.l #1006,d2
  3349.  jsr -30(a6)
  3350.  move.l d0,handle
  3351.  
  3352.  move.l doslib,a6
  3353.  move.l #mt_init,d2
  3354.  move.l handle,d1
  3355.  move.l #10240*8,d3
  3356.  jsr _LVOWrite(a6)
  3357.  
  3358.  move.l doslib,a6
  3359.  move.l handle,d1
  3360.  jsr -36(a6)
  3361.  
  3362.  move.l doslib,a6
  3363.  move.l #200,d1
  3364.  jsr -198(a6) 
  3365.  
  3366.  move.w #$0020,$dff000+intena
  3367.  move.l #bigfield,$dff080
  3368.  
  3369.  add.b #1,SAVELETTER
  3370.  
  3371.  rts
  3372.  
  3373. SAVENAME: dc.b 'work:rawscrn'
  3374. SAVELETTER: dc.b 'd',0
  3375.  
  3376.  even
  3377.  
  3378.  include "ab3:CHEESESAUCE/CHUNKY.s"
  3379.  
  3380.  
  3381. MASTERQUITTING: dc.b 0
  3382. SLAVEQUITTING: dc.b 0
  3383. MASTERPAUSE: dc.b 0
  3384. SLAVEPAUSE: dc.b 0
  3385.  
  3386. PAUSEOPTS:
  3387.  include "ab3:CHEESESAUCE/pauseopts"
  3388.  
  3389. ENDZONE: dc.w 0
  3390.  
  3391. ENDZONES:
  3392. ; LEVEL 1
  3393.  dc.w -1
  3394. ; dc.w 55
  3395. ; LEVEL 2
  3396.  dc.w 149
  3397. ; LEVEL 3
  3398.  dc.w 155
  3399. ; LEVEL 4
  3400.  dc.w 107
  3401. ; LEVEL 5
  3402.  dc.w 67
  3403. ; LEVEL 6
  3404.  dc.w 132
  3405. ; LEVEL 7
  3406.  dc.w 203
  3407. ; LEVEL 8
  3408.  dc.w 166
  3409. ; LEVEL 9
  3410.  dc.w 118
  3411. ; LEVEL 10
  3412.  dc.w 102
  3413. ; LEVEL 11
  3414.  dc.w 103
  3415. ; LEVEL 12
  3416.  dc.w 2
  3417. ; LEVEL 13
  3418.  dc.w 98
  3419. ; LEVEL 14
  3420.  dc.w 0
  3421. ; LEVEL 15
  3422.  dc.w 148
  3423. ; LEVEL 16
  3424.  dc.w 103
  3425.  
  3426. ***************************************************************************
  3427. ***************************************************************************
  3428. ****************** End of Main Loop here ********************************** 
  3429. ***************************************************************************
  3430. ***************************************************************************
  3431.  
  3432. putinsmallscr:
  3433.  move.l #$1fe0000,statskip
  3434.  move.l #$1fe0000,statskip+4
  3435.  
  3436.  move.l #healthpal,a5
  3437.  move.l COPSCRN1,a0
  3438.  move.l COPSCRN2,a2
  3439.  move.w #scrheight-1,d0
  3440.  move.l #0,d6
  3441.  move.w #0,d3
  3442.  move.w #$2bdf,startwait
  3443.  move.w #$2d01,endwait
  3444. .fillcop
  3445.  move.w #$180,d1
  3446.  
  3447.  move.l a0,a1
  3448.  move.l a2,a3
  3449.  move.w #$10c,(a1)+
  3450.  move.w #$10c,(a3)+
  3451.  move.w d3,(a1)+
  3452.  move.w d3,(a3)+
  3453.  eor.w #$8000,d3
  3454.  
  3455.  move.w #$106,(a1)+
  3456.  move.w #$106,(a3)+
  3457.  move.w #$2c42,d5
  3458.  or.w d3,d5
  3459.  and.w #$fffe,d5
  3460.  move.w d5,(a1)+
  3461.  move.w d5,(a3)+
  3462.  bsr do32
  3463.  
  3464.  move.w #$106,(a1)+
  3465.  move.w #$106,(a3)+
  3466.  move.w #$4c42,d5
  3467.  or.w d3,d5
  3468.  and.w #$fffe,d5
  3469.  move.w d5,(a1)+
  3470.  move.w d5,(a3)+
  3471.  bsr do32
  3472.  
  3473.  move.w #$106,(a1)+
  3474.  move.w #$106,(a3)+
  3475.  move.w #$6c42,d5
  3476.  or.w d3,d5
  3477.  and.w #$fffe,d5
  3478.  move.w d5,(a1)+
  3479.  move.w d5,(a3)+
  3480.  bsr do32
  3481.  
  3482.  
  3483.  move.l #$1060c42,(a1)+
  3484.  move.l #$1060c42,(a3)+
  3485.  move.w #$19e,(a1)+
  3486.  move.w (a5),(a1)+
  3487.  move.w #$19e,(a3)+
  3488.  move.w (a5)+,(a3)+
  3489.  
  3490. **********************************
  3491.  
  3492.  adda.w #104*4,a0
  3493.  adda.w #104*4,a2
  3494.  dbra d0,.fillcop
  3495.  
  3496.  move.w #$48,fetchstart
  3497.  move.w #$88,fetchstop
  3498.  move.w #$2cb1,winstart
  3499.  move.w #$2c91,winstop
  3500.  move.w #-24,modulo
  3501.  move.w #-24,modulo+4
  3502.  
  3503.  move.l #nullspr,d0
  3504.  move.w d0,s4l
  3505.  move.w d0,s5l
  3506.  move.w d0,s6l
  3507.  move.w d0,s7l
  3508.  move.w d0,s0l
  3509.  move.w d0,s1l
  3510.  move.w d0,s2l
  3511.  move.w d0,s3l
  3512.  swap d0
  3513.  move.w d0,s4h
  3514.  move.w d0,s5h
  3515.  move.w d0,s6h
  3516.  move.w d0,s7h 
  3517.  move.w d0,s0h
  3518.  move.w d0,s1h
  3519.  move.w d0,s2h
  3520.  move.w d0,s3h 
  3521.  
  3522. ; move.l #borders,d0
  3523. ; move.w d0,s0l
  3524. ; swap d0
  3525. ; move.w d0,s0h
  3526. ; move.l #borders+2592,d0
  3527. ; move.w d0,s1l
  3528. ; swap d0
  3529. ; move.w d0,s1h
  3530. ; move.l #borders+2592*2,d0
  3531. ; move.w d0,s2l
  3532. ; swap d0
  3533. ; move.w d0,s2h
  3534. ; move.l #borders+2592*3,d0
  3535. ; move.w d0,s3l
  3536. ; swap d0
  3537. ; move.w d0,s3h
  3538.  
  3539.  
  3540.  move.l #scrn+40,a0
  3541.  move.l #scrn+160,a1
  3542.  move.l #scrn+280,a2
  3543.  move.l #smallscrntab,a3
  3544.  move.w #191,d7    ; counter
  3545.  move.w #0,d1    ; xpos
  3546. .plotscrnloop:
  3547.  move.b (a3)+,d0
  3548.  move.w d1,d2
  3549.  asr.w #3,d2
  3550.  move.b d1,d3
  3551.  not.b d3
  3552.  bclr.b d3,-40(a0,d2.w)
  3553.  bclr.b d3,(a0,d2.w)
  3554.  bclr.b d3,40(a0,d2.w)
  3555.  bclr.b d3,-40(a1,d2.w)
  3556.  bclr.b d3,(a1,d2.w)
  3557.  bclr.b d3,40(a1,d2.w)
  3558.  bclr.b d3,-40(a2,d2.w)
  3559.  btst #0,d0
  3560.  beq.s .nobp1
  3561.  bset.b d3,-40(a0,d2.w)
  3562. .nobp1:
  3563.  btst #1,d0
  3564.  beq.s .nobp2
  3565.  bset.b d3,(a0,d2.w)
  3566. .nobp2:
  3567.  btst #2,d0
  3568.  beq.s .nobp3
  3569.  bset.b d3,40(a0,d2.w)
  3570. .nobp3:
  3571.  btst #3,d0
  3572.  beq.s .nobp4
  3573.  bset.b d3,-40(a1,d2.w)
  3574. .nobp4:
  3575.  btst #4,d0
  3576.  beq.s .nobp5
  3577.  bset.b d3,(a1,d2.w)
  3578. .nobp5:
  3579.  btst #5,d0
  3580.  beq.s .nobp6
  3581.  bset.b d3,40(a1,d2.w)
  3582. .nobp6:
  3583.  btst #6,d0
  3584.  beq.s .nobp7
  3585.  bset.b d3,-40(a2,d2.w)
  3586. .nobp7:
  3587.  
  3588.  addq #1,d1
  3589.  
  3590.  dbra d7,.plotscrnloop
  3591.  
  3592.  
  3593.  rts
  3594.  
  3595. putinlargescr:
  3596.  
  3597.  move.l #$1000000,statskip
  3598.  move.l #$fffffffe,statskip+4
  3599.  
  3600.  move.l #healthpal,a5
  3601. ; move.l COPSCRN1,a0
  3602. ; move.l COPSCRN2,a2
  3603.  move.w #scrheight-1,d0
  3604.  move.l #0,d6
  3605.  move.w #0,d3
  3606.  move.w #$29df,startwait
  3607.  move.w #$2b01,endwait
  3608. .fillcop
  3609.  move.w #$180,d1
  3610.  
  3611.  move.l a0,a1
  3612.  move.l a2,a3
  3613.  move.w #$10c,(a1)+
  3614.  move.w #$10c,(a3)+
  3615.  move.w d3,(a1)+
  3616.  move.w d3,(a3)+
  3617.  eor.w #$8000,d3
  3618.  
  3619.  move.w #$106,(a1)+
  3620.  move.w #$106,(a3)+
  3621.  move.w #$2c42,d5
  3622.  or.w d3,d5
  3623.  and.w #$fffe,d5
  3624.  move.w d5,(a1)+
  3625.  move.w d5,(a3)+
  3626.  bsr do32
  3627.  
  3628.  move.w #$106,(a1)+
  3629.  move.w #$106,(a3)+
  3630.  move.w #$4c42,d5
  3631.  or.w d3,d5
  3632.  and.w #$fffe,d5
  3633.  move.w d5,(a1)+
  3634.  move.w d5,(a3)+
  3635.  bsr do32
  3636.  
  3637.  move.w #$106,(a1)+
  3638.  move.w #$106,(a3)+
  3639.  move.w #$6c42,d5
  3640.  or.w d3,d5
  3641.  and.w #$fffe,d5
  3642.  move.w d5,(a1)+
  3643.  move.w d5,(a3)+
  3644.  bsr do32
  3645.  
  3646.  move.w startwait,(a1)+
  3647.  move.w #$fffe,(a1)+
  3648.  move.w endwait,(a1)+
  3649.  move.w #$ff00,(a1)+
  3650.  move.w startwait,(a3)+
  3651.  move.w #$fffe,(a3)+
  3652.  move.w endwait,(a3)+
  3653.  move.w #$ff00,(a3)+
  3654.  
  3655. ; move.l $1fe0000,(a1)+
  3656. ; move.l $1fe0000,(a3)+
  3657. ; move.l $1fe0000,(a1)+
  3658. ; move.l $1fe0000,(a3)+
  3659.  
  3660.  
  3661.  add.w #$300,startwait
  3662.  add.w #$300,endwait
  3663.  
  3664. ; move.l #$1060c42,(a1)+
  3665. ; move.l #$1060c42,(a3)+
  3666. ; move.w #$19e,(a1)+
  3667. ; move.w (a5),(a1)+
  3668. ; move.w #$19e,(a3)+
  3669. ; move.w (a5)+,(a3)+
  3670.  
  3671. **********************************
  3672.  
  3673.  adda.w #104*4,a0
  3674.  adda.w #104*4,a2
  3675.  dbra d0,.fillcop
  3676.  
  3677.  move.w #$38,fetchstart
  3678.  move.w #$b8,fetchstop
  3679.  move.w #$2c81,winstart
  3680.  move.w #$2cc1,winstop
  3681.  move.w #-40,modulo
  3682.  move.w #-40,modulo+4
  3683.  
  3684.  move.l #nullspr,d0
  3685.  move.w d0,s0l
  3686.  move.w d0,s1l
  3687.  move.w d0,s2l
  3688.  move.w d0,s3l
  3689.  move.w d0,s4l
  3690.  move.w d0,s5l
  3691.  move.w d0,s6l
  3692.  move.w d0,s7l
  3693.  swap d0
  3694.  move.w d0,s0h
  3695.  move.w d0,s1h
  3696.  move.w d0,s2h
  3697.  move.w d0,s3h
  3698.  move.w d0,s4h
  3699.  move.w d0,s5h
  3700.  move.w d0,s6h
  3701.  move.w d0,s7h 
  3702.  
  3703.  move.l scrn,a0
  3704.  move.l a0,a1
  3705.  move.l a0,a2
  3706.  add.l #40,a0
  3707.  add.l #160,a1
  3708.  add.l #280,a2
  3709.  move.l #scrntab,a3
  3710.  move.w #319,d7    ; counter
  3711.  move.w #0,d1    ; xpos
  3712. .plotscrnloop:
  3713.  move.b (a3)+,d0
  3714.  move.w d1,d2
  3715.  asr.w #3,d2
  3716.  move.b d1,d3
  3717.  not.b d3
  3718.  bclr.b d3,-40(a0,d2.w)
  3719.  bclr.b d3,(a0,d2.w)
  3720.  bclr.b d3,40(a0,d2.w)
  3721.  bclr.b d3,-40(a1,d2.w)
  3722.  bclr.b d3,(a1,d2.w)
  3723.  bclr.b d3,40(a1,d2.w)
  3724.  bclr.b d3,-40(a2,d2.w)
  3725.  btst #0,d0
  3726.  beq.s .nobp1
  3727.  bset.b d3,-40(a0,d2.w)
  3728. .nobp1:
  3729.  btst #1,d0
  3730.  beq.s .nobp2
  3731.  bset.b d3,(a0,d2.w)
  3732. .nobp2:
  3733.  btst #2,d0
  3734.  beq.s .nobp3
  3735.  bset.b d3,40(a0,d2.w)
  3736. .nobp3:
  3737.  btst #3,d0
  3738.  beq.s .nobp4
  3739.  bset.b d3,-40(a1,d2.w)
  3740. .nobp4:
  3741.  btst #4,d0
  3742.  beq.s .nobp5
  3743.  bset.b d3,(a1,d2.w)
  3744. .nobp5:
  3745.  btst #5,d0
  3746.  beq.s .nobp6
  3747.  bset.b d3,40(a1,d2.w)
  3748. .nobp6:
  3749.  btst #6,d0
  3750.  beq.s .nobp7
  3751.  bset.b d3,-40(a2,d2.w)
  3752. .nobp7:
  3753.  
  3754.  addq #1,d1
  3755.  
  3756.  dbra d7,.plotscrnloop
  3757.  
  3758.  rts
  3759.  
  3760. CLEARKEYBOARD:
  3761.  move.l #KeyMap,a5
  3762.  moveq #0,d0
  3763.  move.w #15,d1
  3764. clrloo:
  3765.  move.l d0,(a5)+
  3766.  move.l d0,(a5)+
  3767.  move.l d0,(a5)+
  3768.  move.l d0,(a5)+
  3769.  dbra d1,clrloo
  3770.  rts
  3771.  
  3772. READCONTROLS: dc.w 0
  3773.  
  3774. tstststst: dc.w 0
  3775.  
  3776. BollocksRoom:
  3777.  dc.w -1
  3778.  ds.l 50
  3779.  
  3780. GUNYOFFS:
  3781.  dc.w 20
  3782.  dc.w 20
  3783.  dc.w 0
  3784.  dc.w 20
  3785.  dc.w 20
  3786.  dc.w 0
  3787.  dc.w 0
  3788.  dc.w 20
  3789.  
  3790. PLR1_BOBBLEY: dc.l 0
  3791. PLR2_BOBBLEY: dc.l 0
  3792.  
  3793. USEPLR1:
  3794.  
  3795. ***********************************
  3796.  
  3797.  move.l PLR1_Obj,a0 
  3798.  move.b #4,16(a0)
  3799.  move.l ObjectPoints,a1
  3800.  move.l #ObjRotated,a2
  3801.  move.w (a0),d0
  3802.  move.l PLR1_xoff,(a1,d0.w*8)
  3803.  move.l PLR1_zoff,4(a1,d0.w*8)
  3804.  move.l PLR1_Roompt,a1
  3805.  
  3806.  moveq #0,d2
  3807.  move.b damagetaken(a0),d2
  3808.  beq .notbeenshot
  3809.  moveq #0,d4
  3810.  
  3811.  move.w ImpactX(a0),d3
  3812.  beq.s .notwist
  3813.  move.w d2,d4
  3814. .notwist:
  3815.  add.w d3,PLR1s_xspdval
  3816.  move.w ImpactZ(a0),d3
  3817.  beq.s .notwist2
  3818.  move.w d2,d4
  3819. .notwist2:
  3820.  add.w d3,PLR1s_zspdval
  3821.  move.w ImpactY(a0),d3
  3822.  ext.l d3
  3823.  asl.l #8,d3
  3824.  add.l d3,PLR1s_yvel
  3825.  
  3826.  move.w #0,ImpactX(a0)
  3827.  move.w #0,ImpactY(a0)
  3828.  move.w #0,ImpactZ(a0)
  3829.  
  3830.  jsr GetRand
  3831.  muls d4,d0
  3832.  asr.l #8,d0
  3833.  asr.l #4,d0
  3834.  add.w d0,PLR1s_angspd
  3835.  
  3836.  move.w #$f00,hitcol
  3837.  move.w #$f00,hitcol2
  3838.  
  3839.  tst.w PLAYERONEHEALTH
  3840.  ble.s .notbeenshot
  3841.  
  3842.  sub.w d2,PLAYERONEHEALTH
  3843.  movem.l d0-d7/a0-a6,-(a7)
  3844.  move.b #$fb,IDNUM
  3845.  move.w #19,Samplenum
  3846.  clr.b notifplaying
  3847.  move.w #0,Noisex
  3848.  move.w #0,Noisez
  3849.  move.w #100,Noisevol
  3850.  jsr MakeSomeNoise
  3851.  
  3852.  movem.l (a7)+,d0-d7/a0-a6
  3853.  
  3854. .notbeenshot
  3855.  move.b #0,damagetaken(a0)
  3856.  move.b #10,numlives(a0)
  3857.  
  3858.  move.w p1_angpos,Facing(a0)
  3859.  move.b PLR1_StoodInTop,ObjInTop(a0)
  3860.  
  3861.  move.w (a1),12(a0)
  3862.  move.w (a1),d2
  3863.  move.l #ZoneBrightTable,a1
  3864.  move.l (a1,d2.w*4),d2
  3865.  tst.b PLR1_StoodInTop
  3866.  bne.s .okinbott
  3867.  swap d2
  3868. .okinbott:
  3869.  
  3870.  move.w d2,2(a0)
  3871.  
  3872.  
  3873.  move.l p1_yoff,d0
  3874.  move.l p1_height,d1
  3875.  asr.l #1,d1
  3876.  add.l d1,d0
  3877.  asr.l #7,d0
  3878.  move.w d0,4(a0)
  3879.  
  3880. ***********************************
  3881.  
  3882.  move.l PLR2_Obj,a0 
  3883.  move.b #5,16(a0)
  3884.  
  3885.  move.w p2_angpos,d0
  3886.  and.w #8190,d0
  3887.  move.w d0,Facing(a0)
  3888. ; jsr ViewpointToDraw
  3889. ; asl.w #2,d0
  3890. ; moveq #0,d1
  3891. ; move.b p2_bobble,d1
  3892. ; not.b d1
  3893. ; lsr.b #3,d1
  3894. ; and.b #$3,d1
  3895. ; add.w d1,d0
  3896. ; move.w d0,10(a0)
  3897. ; move.w #10,8(a0)
  3898.  
  3899.  move.l ObjectPoints,a1
  3900.  move.l #ObjRotated,a2
  3901.  move.w (a0),d0
  3902.  move.l PLR2_xoff,(a1,d0.w*8)
  3903.  move.l PLR2_zoff,4(a1,d0.w*8)
  3904.  move.l PLR2_Roompt,a1
  3905.  
  3906.  moveq #0,d2
  3907.  move.b damagetaken(a0),d2
  3908.  beq .notbeenshot2
  3909.  
  3910.  move.w ImpactX(a0),d3
  3911.  add.w d3,PLR2s_xspdval
  3912.  move.w ImpactZ(a0),d3
  3913.  add.w d3,PLR2s_zspdval
  3914.  move.w ImpactY(a0),d3
  3915.  ext.l d3
  3916.  asl.l #8,d3
  3917.  add.l d3,PLR2s_yvel
  3918.  
  3919.  move.w #0,ImpactX(a0)
  3920.  move.w #0,ImpactY(a0)
  3921.  move.w #0,ImpactZ(a0)
  3922.  tst.w PLAYERTWOHEALTH
  3923.  ble.s .notbeenshot2
  3924.  
  3925.  sub.w d2,PLAYERTWOHEALTH
  3926. .notbeenshot2
  3927.  move.b #0,damagetaken(a0)
  3928.  move.b #10,numlives(a0)
  3929.  
  3930.  move.b PLR2_StoodInTop,ObjInTop(a0)
  3931.  
  3932.  move.w (a1),12(a0)
  3933.  move.w (a1),d2
  3934.  move.l #ZoneBrightTable,a1
  3935.  move.l (a1,d2.w*4),d2
  3936.  tst.b PLR2_StoodInTop
  3937.  bne.s .okinbott2
  3938.  swap d2
  3939. .okinbott2:
  3940.  
  3941.  move.w d2,2(a0)
  3942.  
  3943.  move.l p2_yoff,d0
  3944.  move.l p2_height,d1
  3945.  asr.l #1,d1
  3946.  add.l d1,d0
  3947.  asr.l #7,d0
  3948.  move.w d0,4(a0)
  3949.  
  3950.  jsr ViewpointToDraw
  3951.  add.l d0,d0
  3952.  
  3953.  move.l LINKFILE,a6
  3954.  add.l #PLR2ALIEN,a6
  3955.  move.w (a6),d7
  3956.  move.w d7,d1
  3957.  
  3958.  move.b d1,TypeOfThing(a0)
  3959.  
  3960.  move.l LINKFILE,a6
  3961.  add.l #AlienStats,a6
  3962.  muls #AlienStatLen,d1
  3963.  add.l d1,a6
  3964.  move.b A_GFXType+1(a6),VECOBJ
  3965.  cmp.w #1,A_GFXType(a6)
  3966.  bne.s .NOSIDES2
  3967.  
  3968.  moveq #0,d0
  3969.  
  3970. .NOSIDES2:
  3971.  
  3972.  move.l LINKFILE,a6
  3973.  
  3974.  add.l #AlienAnimData,a6
  3975.  
  3976.  move.w d7,d1
  3977.  muls #A_AnimLen,d1
  3978.  add.l d1,a6
  3979.  
  3980. ; move.l ANIMPOINTER,a6
  3981.  
  3982.  muls #A_OptLen,d0
  3983.  add.w d0,a6
  3984.  
  3985.  move.w SecTimer(a0),d1
  3986.  move.w d1,d2
  3987.  muls #A_FrameLen,d1
  3988.  
  3989.  addq #1,d2
  3990.  
  3991.  move.w d2,d3
  3992.  muls #A_FrameLen,d3
  3993.  tst.b (a6,d3.w)
  3994.  bge.s .noendanim
  3995.  move.w #0,d2
  3996. .noendanim
  3997.  move.w d2,SecTimer(a0)
  3998.  
  3999.  move.w d2,d1
  4000.  
  4001.  muls #A_FrameLen,d1
  4002.  
  4003.  move.l #0,8(a0)
  4004.  move.b (a6,d1.w),9(a0)
  4005.  move.b 1(a6,d1.w),d0
  4006.  ext.w d0
  4007.  bgt.s .noflip
  4008.  move.b #128,10(a0)
  4009.  neg.w d0
  4010. .noflip:
  4011.  sub.w #1,d0
  4012.  move.b d0,11(a0)
  4013.  
  4014.  move.w #-1,6(a0)
  4015.  cmp.b #1,VECOBJ
  4016.  beq.s .nosize
  4017.  bgt.s .setlight
  4018.  move.w 2(a6,d1.w),6(a0)
  4019.  bra.s .ddone
  4020.  
  4021. .nosize
  4022.  
  4023. ; move.l #$00090001,8(a0)
  4024.  
  4025.  bra.s .ddone
  4026.  
  4027. .setlight:
  4028.  move.w 2(a6,d1.w),6(a0)
  4029.  
  4030.  move.b VECOBJ,d1
  4031.  or.b d1,10(a0)
  4032.  
  4033. .ddone:
  4034.  
  4035.  
  4036. **********************************
  4037.  
  4038.  move.l PLR1_Obj,a0
  4039.  
  4040.  ifeq CHEESEY
  4041.  
  4042.  tst.w PLAYERONEHEALTH
  4043.  bgt.s .notdead
  4044.  
  4045.  move.w #-1,12+128(a0)
  4046.  rts
  4047.  
  4048. .notdead: 
  4049.  
  4050.  move.l PLR1_Roompt,a1
  4051.  
  4052.  move.w Facing(a0),d0
  4053.  add.w #4096,d0
  4054.  and.w #8190,d0
  4055.  move.w d0,Facing+128(a0)
  4056.  
  4057.  move.w (a1),12+128(a0)
  4058.  move.w (a1),GraphicRoom+128(a0)
  4059.  
  4060.  moveq #0,d0
  4061.  move.b p1_gunselected,d0
  4062.  
  4063.  move.l LINKFILE,a1
  4064.  add.l #GunObjects,a1
  4065.  move.w (a1,d0.w*2),d0
  4066.  
  4067.  move.b d0,TypeOfThing+128(a0)
  4068.  move.b #1,128+16(a0)
  4069.  
  4070.  move.w (a0),d0
  4071.  move.w 128(a0),d1
  4072.  move.l ObjectPoints,a1
  4073.  move.l (a1,d0.w*8),(a1,d1.w*8)
  4074.  move.l 4(a1,d0.w*8),4(a1,d1.w*8)
  4075.  
  4076.  st WhichAnim+128(a0)
  4077.  
  4078.  move.l p1_yoff,d0
  4079.  move.l p1_height,d1
  4080.  asr.l #2,d1
  4081.  add.l #10*128,d1
  4082.  add.l d1,d0
  4083.  asr.l #7,d0
  4084.  move.w d0,4+128(a0)
  4085.  move.l PLR1_BOBBLEY,d1
  4086.  asr.l #8,d1
  4087.  move.l d1,d0
  4088.  asr.l #1,d0
  4089.  add.l d0,d1
  4090.  add.w d1,4+128(a0)
  4091.  
  4092.  move.b ObjInTop(a0),ObjInTop+128(a0)
  4093.  
  4094.  endc
  4095.  
  4096.  ifne CHEESEY
  4097.  move.w #-1,12+128(a0)
  4098.  endc
  4099.  
  4100.  rts
  4101.  
  4102. ***************************************************
  4103. **************************************************
  4104.  
  4105. USEPLR2:
  4106.  
  4107. ***********************************
  4108.  
  4109.  move.l PLR2_Obj,a0 
  4110.  move.b #5,16(a0)
  4111.  move.l ObjectPoints,a1
  4112.  move.l #ObjRotated,a2
  4113.  move.w (a0),d0
  4114.  move.l PLR2_xoff,(a1,d0.w*8)
  4115.  move.l PLR2_zoff,4(a1,d0.w*8)
  4116.  move.l PLR2_Roompt,a1
  4117.  
  4118.  moveq #0,d2
  4119.  move.b damagetaken(a0),d2
  4120.  beq .notbeenshot
  4121.  
  4122.  moveq #0,d4
  4123.  move.w ImpactX(a0),d3
  4124.  beq.s .notwist
  4125.  move.w d2,d4
  4126. .notwist:
  4127.  add.w d3,PLR2s_xspdval
  4128.  move.w ImpactZ(a0),d3
  4129.  beq.s .notwist2
  4130.  move.w d2,d4
  4131. .notwist2:
  4132.  add.w d3,PLR2s_zspdval
  4133.  
  4134.  jsr GetRand
  4135.  muls d4,d0
  4136.  asr.l #8,d0
  4137.  asr.l #4,d0
  4138.  add.w d0,PLR2s_angspd
  4139.  
  4140.  
  4141.  move.w #$f00,hitcol
  4142.  move.w #$f00,hitcol2
  4143.  
  4144.  tst.w PLAYERTWOHEALTH
  4145.  ble.s .notbeenshot
  4146.  
  4147.  sub.w d2,PLAYERTWOHEALTH
  4148.  movem.l d0-d7/a0-a6,-(a7)
  4149.  move.w #19,Samplenum
  4150.  clr.b notifplaying
  4151.  move.b #$fb,IDNUM
  4152.  move.w #0,Noisex
  4153.  move.w #0,Noisez
  4154.  move.w #100,Noisevol
  4155.  jsr MakeSomeNoise
  4156.  
  4157.  movem.l (a7)+,d0-d7/a0-a6
  4158.  
  4159. .notbeenshot
  4160.  move.b #0,damagetaken(a0)
  4161.  move.b #10,numlives(a0)
  4162.  
  4163.  move.w p2_angpos,Facing(a0)
  4164.  move.b PLR2_StoodInTop,ObjInTop(a0)
  4165.  
  4166.  move.w (a1),12(a0)
  4167.  move.w (a1),d2
  4168.  move.l #ZoneBrightTable,a1
  4169.  move.l (a1,d2.w*4),d2
  4170.  tst.b PLR2_StoodInTop
  4171.  bne.s .okinbott
  4172.  swap d2
  4173. .okinbott:
  4174.  
  4175.  move.w d2,2(a0)
  4176.  
  4177.  move.l PLR2_yoff,d0
  4178.  move.l p2_height,d1
  4179.  asr.l #1,d1
  4180.  add.l d1,d0
  4181.  asr.l #7,d0
  4182.  move.w d0,4(a0)
  4183.  
  4184. ***********************************
  4185.  
  4186.  move.l PLR1_Obj,a0 
  4187.  move.b #4,16(a0)
  4188.  
  4189.  move.w PLR1_angpos,d0
  4190.  and.w #8190,d0
  4191.  move.w d0,Facing(a0)
  4192. ; jsr ViewpointToDraw
  4193. ; asl.w #2,d0
  4194. ; moveq #0,d1
  4195. ; move.b p2_bobble,d1
  4196. ; not.b d1
  4197. ; lsr.b #3,d1
  4198. ; and.b #$3,d1
  4199. ; add.w d1,d0
  4200. ; move.w d0,10(a0)
  4201. ; move.w #10,8(a0)
  4202.  
  4203.  move.l ObjectPoints,a1
  4204.  move.l #ObjRotated,a2
  4205.  move.w (a0),d0
  4206.  move.l PLR1_xoff,(a1,d0.w*8)
  4207.  move.l PLR1_zoff,4(a1,d0.w*8)
  4208.  move.l PLR1_Roompt,a1
  4209.  
  4210.  moveq #0,d2
  4211.  move.b damagetaken(a0),d2
  4212.  beq .notbeenshot2
  4213.  
  4214.  move.w ImpactX(a0),d3
  4215.  add.w d3,PLR1s_xspdval
  4216.  move.w ImpactZ(a0),d3
  4217.  add.w d3,PLR1s_zspdval
  4218.  
  4219.  sub.w d2,PLAYERONEHEALTH
  4220. .notbeenshot2
  4221.  move.b #0,damagetaken(a0)
  4222.  move.b #10,numlives(a0)
  4223.  
  4224.  move.b PLR1_StoodInTop,ObjInTop(a0)
  4225.  
  4226.  move.w (a1),12(a0)
  4227.  move.w (a1),d2
  4228.  move.l #ZoneBrightTable,a1
  4229.  move.l (a1,d2.w*4),d2
  4230.  tst.b PLR1_StoodInTop
  4231.  bne.s .okinbott2
  4232.  swap d2
  4233. .okinbott2:
  4234.  
  4235.  move.w d2,2(a0)
  4236.  
  4237.  move.l p1_yoff,d0
  4238.  move.l p1_height,d1
  4239.  asr.l #1,d1
  4240.  add.l d1,d0
  4241.  asr.l #7,d0
  4242.  move.w d0,4(a0)
  4243.  
  4244.  jsr ViewpointToDraw
  4245.  add.l d0,d0
  4246.  
  4247.  move.l LINKFILE,a6
  4248.  add.l #PLR1ALIEN,a6
  4249.  move.w (a6),d7
  4250.  move.w d7,d1
  4251.  
  4252.  move.b d1,TypeOfThing(a0)
  4253.  
  4254.  move.l LINKFILE,a6
  4255.  add.l #AlienStats,a6
  4256.  muls #AlienStatLen,d1
  4257.  add.l d1,a6
  4258.  move.b A_GFXType+1(a6),VECOBJ
  4259.  cmp.w #1,A_GFXType(a6)
  4260.  bne.s .NOSIDES2
  4261.  
  4262.  moveq #0,d0
  4263.  
  4264. .NOSIDES2:
  4265.  
  4266.  move.l LINKFILE,a6
  4267.  
  4268.  add.l #AlienAnimData,a6
  4269.  
  4270.  move.w d7,d1
  4271.  muls #A_AnimLen,d1
  4272.  add.l d1,a6
  4273.  
  4274. ; move.l ANIMPOINTER,a6
  4275.  
  4276.  muls #A_OptLen,d0
  4277.  add.w d0,a6
  4278.  
  4279.  move.w SecTimer(a0),d1
  4280.  move.w d1,d2
  4281.  muls #A_FrameLen,d1
  4282.  
  4283.  addq #1,d2
  4284.  
  4285.  move.w d2,d3
  4286.  muls #A_FrameLen,d3
  4287.  tst.b (a6,d3.w)
  4288.  bge.s .noendanim
  4289.  move.w #0,d2
  4290. .noendanim
  4291.  move.w d2,SecTimer(a0)
  4292.  
  4293.  move.w d2,d1
  4294.  
  4295.  muls #A_FrameLen,d1
  4296.  
  4297.  move.l #0,8(a0)
  4298.  move.b (a6,d1.w),9(a0)
  4299.  move.b 1(a6,d1.w),d0
  4300.  ext.w d0
  4301.  bgt.s .noflip
  4302.  move.b #128,10(a0)
  4303.  neg.w d0
  4304. .noflip:
  4305.  sub.w #1,d0
  4306.  move.b d0,11(a0)
  4307.  
  4308.  move.w #-1,6(a0)
  4309.  cmp.b #1,VECOBJ
  4310.  beq.s .nosize
  4311.  bgt.s .setlight
  4312.  move.w 2(a6,d1.w),6(a0)
  4313.  bra.s .ddone
  4314.  
  4315. .nosize
  4316.  
  4317. ; move.l #$00090001,8(a0)
  4318.  
  4319.  bra.s .ddone
  4320.  
  4321. .setlight:
  4322.  move.w 2(a6,d1.w),6(a0)
  4323.  
  4324.  move.b VECOBJ,d1
  4325.  or.b d1,10(a0)
  4326.  
  4327. .ddone:
  4328.  
  4329. **********************************
  4330.  
  4331.  move.l PLR2_Obj,a0
  4332.  
  4333.  ifeq CHEESEY
  4334.  
  4335.  tst.w PLAYERTWOHEALTH
  4336.  bgt.s .notdead
  4337.  
  4338.  move.w #-1,12+64(a0)
  4339.  rts
  4340.  
  4341. .notdead: 
  4342.  move.l PLR2_Roompt,a1
  4343.  
  4344.  move.w Facing(a0),d0
  4345.  add.w #4096,d0
  4346.  and.w #8190,d0
  4347.  move.w d0,Facing+64(a0)
  4348.  
  4349.  move.w (a1),12+64(a0)
  4350.  move.w (a1),GraphicRoom+64(a0)
  4351.  
  4352.  moveq #0,d0
  4353.  move.b p2_gunselected,d0
  4354.  
  4355.  move.l LINKFILE,a1
  4356.  add.l #GunObjects,a1
  4357.  move.w (a1,d0.w*2),d0
  4358.  
  4359.  move.b d0,TypeOfThing+64(a0)
  4360.  move.b #1,64+16(a0)
  4361.  
  4362.  move.w (a0),d0
  4363.  move.w 64(a0),d1
  4364.  move.l ObjectPoints,a1
  4365.  move.l (a1,d0.w*8),(a1,d1.w*8) 
  4366.  move.l 4(a1,d0.w*8),4(a1,d1.w*8) 
  4367.  
  4368.  st WhichAnim+64(a0)
  4369.  
  4370.  move.l p2_yoff,d0
  4371.  move.l p2_height,d1
  4372.  asr.l #2,d1
  4373.  add.l #10*128,d1
  4374.  add.l d1,d0
  4375.  asr.l #7,d0
  4376.  move.w d0,4+64(a0)
  4377.  move.l PLR2_BOBBLEY,d1
  4378.  asr.l #8,d1
  4379.  move.l d1,d0
  4380.  asr.l #1,d0
  4381.  add.l d0,d1
  4382.  add.w d1,4+64(a0)
  4383.  
  4384.  move.b ObjInTop(a0),ObjInTop+64(a0)
  4385.  
  4386.  endc
  4387.  
  4388.  ifne CHEESEY
  4389.  
  4390.  move.w #-1,12+64(a0)
  4391.  endc
  4392.  
  4393.  rts
  4394.  
  4395.  
  4396.  
  4397. GunSelected: dc.b 0
  4398.  even
  4399.  
  4400.  
  4401. GunData: dc.l 0
  4402.  
  4403.  
  4404. protA: dc.w 0
  4405.  
  4406. Path:
  4407. ; incbin "testpath"
  4408. endpath:
  4409. pathpt: dc.l Path
  4410.  
  4411.  
  4412. PLR1KEYS: dc.b 0
  4413. PLR1PATH: dc.b 0
  4414. PLR1MOUSE: dc.b -1
  4415. PLR1JOY: dc.b 0
  4416. PLR2KEYS: dc.b 0
  4417. PLR2PATH: dc.b 0
  4418. PLR2MOUSE: dc.b -1
  4419. PLR2JOY: dc.b 0
  4420.  
  4421.  even
  4422.  
  4423. PLR1_bobble: dc.w 0
  4424. PLR2_bobble: dc.w 0
  4425. xwobble: dc.l 0
  4426. xwobxoff: dc.w 0
  4427.  
  4428. xwobzoff: dc.w 0
  4429.  
  4430. PLR1_Control:
  4431.  
  4432. ; Take a snapshot of everything.
  4433.  
  4434.  move.l PLR1_xoff,d2
  4435.  move.l d2,PLR1_oldxoff
  4436.  move.l d2,oldx
  4437.  move.l PLR1_zoff,d3
  4438.  move.l d3,PLR1_oldzoff
  4439.  move.l d3,oldz
  4440.  move.l p1_xoff,d0
  4441.  move.l d0,PLR1_xoff
  4442.  move.l d0,newx
  4443.  move.l p1_zoff,d1
  4444.  move.l d1,newz
  4445.  move.l d1,PLR1_zoff
  4446.  
  4447.  move.l p1_height,PLR1_height
  4448.  
  4449.  sub.l d2,d0
  4450.  sub.l d3,d1
  4451.  move.l d0,xdiff
  4452.  move.l d1,zdiff
  4453.  move.w p1_angpos,d0
  4454.  move.w d0,PLR1_angpos
  4455.  
  4456.  move.l #SineTable,a1
  4457.  move.w (a1,d0.w),PLR1_sinval
  4458.  add.w #2048,d0
  4459.  and.w #8190,d0
  4460.  move.w (a1,d0.w),PLR1_cosval
  4461.  
  4462.  move.l p1_yoff,d0
  4463.  move.w p1_bobble,d1
  4464.  move.w (a1,d1.w),d1
  4465.  move.w d1,d3
  4466.  ble.s .notnegative
  4467.  neg.w d1
  4468. .notnegative:
  4469.  add.w #16384,d1
  4470.  asr.w #4,d1
  4471.  
  4472.  tst.b PLR1_Ducked
  4473.  bne.s .notdouble
  4474.  add.w d1,d1
  4475. .notdouble
  4476.  ext.l d1
  4477.  
  4478.  move.l d1,PLR1_BOBBLEY
  4479.  
  4480.  move.l PLR1_height,d4
  4481.  sub.l d1,d4
  4482.  add.l d1,d0
  4483.  
  4484.  cmp.b #'s',mors
  4485.  beq.s .otherwob
  4486.  asr.w #6,d3
  4487.  ext.l d3
  4488.  move.l d3,xwobble
  4489.  move.w PLR1_sinval,d1
  4490.  muls d3,d1
  4491.  move.w PLR1_cosval,d2
  4492.  muls d3,d2
  4493.  swap d1
  4494.  swap d2
  4495.  asr.w #7,d1
  4496.  move.w d1,xwobxoff
  4497.  asr.w #7,d2
  4498.  neg.w d2
  4499.  move.w d2,xwobzoff
  4500. .otherwob
  4501.  
  4502.  move.l d0,PLR1_yoff
  4503.  move.l d0,newy
  4504.  move.l d0,oldy
  4505.  
  4506.  move.l d4,thingheight
  4507.  move.l #40*256,StepUpVal
  4508.  tst.b PLR1_Ducked
  4509.  beq.s .okbigstep
  4510.  move.l #10*256,StepUpVal
  4511. .okbigstep:
  4512.  
  4513.  move.l #$1000000,StepDownVal
  4514.  
  4515.  move.l PLR1_Roompt,a0
  4516.  move.w ToTelZone(a0),d0
  4517.  blt .noteleport
  4518.  
  4519.  move.w ToTelX(a0),newx
  4520.  move.w ToTelZ(a0),newz
  4521.  move.w #-1,CollId
  4522.  move.l #%111111111111111111,CollideFlags
  4523.  bsr Collision
  4524.  tst.b hitwall
  4525.  beq.s .teleport
  4526.  
  4527.  move.w PLR1_xoff,newx
  4528.  move.w PLR1_zoff,newz
  4529.  bra .noteleport
  4530.  
  4531. .teleport:
  4532.  
  4533.  st PLR1_TELEPORTED
  4534.  
  4535.  move.l PLR1_Roompt,a0
  4536.  move.w ToTelZone(a0),d0
  4537.  move.w ToTelX(a0),PLR1_xoff
  4538.  move.w ToTelZ(a0),PLR1_zoff
  4539.  move.l PLR1_yoff,d1
  4540.  sub.l ToZoneFloor(a0),d1
  4541.  move.l ZoneAdds,a0
  4542.  move.l (a0,d0.w*4),a0
  4543.  add.l LEVELDATA,a0
  4544.  move.l a0,PLR1_Roompt
  4545.  add.l ToZoneFloor(a0),d1
  4546.  move.l d1,PLR1s_yoff
  4547.  move.l d1,PLR1_yoff
  4548.  move.l d1,PLR1s_tyoff
  4549.  move.l PLR1_xoff,PLR1s_xoff
  4550.  move.l PLR1_zoff,PLR1s_zoff
  4551.  
  4552.  SAVEREGS
  4553.  move.w #0,Noisex
  4554.  move.w #0,Noisez
  4555.  move.w #26,Samplenum
  4556.  move.w #100,Noisevol
  4557.  move.b #$fa,IDNUM
  4558.  jsr MakeSomeNoise
  4559.  GETREGS
  4560.  
  4561.  bra .cantmove
  4562.  
  4563. .noteleport:
  4564.  
  4565.  move.l PLR1_Roompt,objroom
  4566.  move.w #%100000000,wallflags
  4567.  move.b PLR1_StoodInTop,StoodInTop
  4568.  
  4569.  move.l #%1011111110111000011,CollideFlags
  4570.  move.w #-1,CollId
  4571.  
  4572.  bsr Collision
  4573.  tst.b hitwall
  4574.  beq.s .nothitanything
  4575.  move.w oldx,PLR1_xoff
  4576.  move.w oldz,PLR1_zoff
  4577.  move.l PLR1_xoff,PLR1s_xoff
  4578.  move.l PLR1_zoff,PLR1s_zoff
  4579.  bra .cantmove
  4580. .nothitanything:
  4581.  
  4582.  move.w #40,extlen
  4583.  move.b #0,awayfromwall
  4584.  
  4585.  clr.b exitfirst
  4586.  clr.b wallbounce
  4587.  bsr MoveObject
  4588.  move.b StoodInTop,PLR1_StoodInTop
  4589.  move.l objroom,PLR1_Roompt
  4590.  move.w newx,PLR1_xoff
  4591.  move.w newz,PLR1_zoff
  4592.  move.l PLR1_xoff,PLR1s_xoff
  4593.  move.l PLR1_zoff,PLR1s_zoff
  4594.  
  4595. .cantmove:
  4596.  
  4597.  move.l PLR1_Roompt,a0
  4598.  
  4599.  move.l ToZoneFloor(a0),d0
  4600.  tst.b PLR1_StoodInTop
  4601.  beq.s notintop
  4602.  move.l ToUpperFloor(a0),d0
  4603. notintop:
  4604.  
  4605.  adda.w #ToZonePts,a0
  4606.  sub.l PLR1_height,d0
  4607.  move.l d0,PLR1s_tyoff
  4608.  move.w p1_angpos,tmpangpos
  4609.  
  4610. ; move.l (a0),a0        ; jump to viewpoint list
  4611.  * A0 is pointing at a pointer to list of points to rotate
  4612.  move.w (a0)+,d1
  4613.  ext.l d1
  4614.  add.l PLR1_Roompt,d1
  4615.  move.l d1,PLR1_PointsToRotatePtr
  4616.  tst.w (a0)+
  4617.  sne.s DRAWNGRAPHTOP
  4618.  beq.s nobackgraphics
  4619.  cmp.b #'s',mors
  4620.  beq.s nobackgraphics
  4621.  move.l a0,-(a7)
  4622.  jsr putinbackdrop 
  4623.  move.l (a7)+,a0
  4624. nobackgraphics:
  4625.  adda.w #10,a0
  4626.  move.l a0,PLR1_ListOfGraphRooms
  4627.  
  4628. *************************************************
  4629.  rts
  4630.  
  4631. DRAWNGRAPHTOP
  4632.  dc.w 0 
  4633. tstzone: dc.l 0
  4634. CollId: dc.w 0
  4635.  
  4636. PLR2_Control:
  4637.  
  4638. ; Take a snapshot of everything.
  4639.  
  4640.  move.l PLR2_xoff,d2
  4641.  move.l d2,PLR2_oldxoff
  4642.  move.l d2,oldx
  4643.  move.l PLR2_zoff,d3
  4644.  move.l d3,PLR2_oldzoff
  4645.  move.l d3,oldz
  4646.  move.l p2_xoff,d0
  4647.  move.l d0,PLR2_xoff
  4648.  move.l d0,newx
  4649.  move.l p2_zoff,d1
  4650.  move.l d1,newz
  4651.  move.l d1,PLR2_zoff
  4652.  
  4653.  move.l p2_height,PLR2_height
  4654.  
  4655.  sub.l d2,d0
  4656.  sub.l d3,d1
  4657.  move.l d0,xdiff
  4658.  move.l d1,zdiff
  4659.  move.w p2_angpos,d0
  4660.  move.w d0,PLR2_angpos
  4661.  
  4662.  move.l #SineTable,a1
  4663.  move.w (a1,d0.w),PLR2_sinval
  4664.  add.w #2048,d0
  4665.  and.w #8190,d0
  4666.  move.w (a1,d0.w),PLR2_cosval
  4667.  
  4668.  move.l p2_yoff,d0
  4669.  move.w p2_bobble,d1
  4670.  move.w (a1,d1.w),d1
  4671.  move.w d1,d3
  4672.  ble.s .notnegative
  4673.  neg.w d1
  4674. .notnegative:
  4675.  add.w #16384,d1
  4676.  asr.w #4,d1
  4677.  
  4678.  tst.b PLR2_Ducked
  4679.  bne.s .notdouble
  4680.  add.w d1,d1
  4681. .notdouble
  4682.  ext.l d1
  4683.  
  4684.  move.l d1,PLR2_BOBBLEY
  4685.  
  4686.  move.l PLR2_height,d4
  4687.  sub.l d1,d4
  4688.  add.l d1,d0
  4689.  
  4690.  cmp.b #'s',mors
  4691.  bne.s .otherwob
  4692.  asr.w #6,d3
  4693.  ext.l d3
  4694.  move.l d3,xwobble
  4695.  move.w PLR2_sinval,d1
  4696.  muls d3,d1
  4697.  move.w PLR2_cosval,d2
  4698.  muls d3,d2
  4699.  swap d1
  4700.  swap d2
  4701.  asr.w #7,d1
  4702.  move.w d1,xwobxoff
  4703.  asr.w #7,d2
  4704.  neg.w d2
  4705.  move.w d2,xwobzoff
  4706. .otherwob
  4707.  
  4708.  move.l d0,PLR2_yoff
  4709.  move.l d0,newy
  4710.  move.l d0,oldy
  4711.  
  4712.  move.l d4,thingheight
  4713.  move.l #40*256,StepUpVal
  4714.  tst.b PLR2_Ducked
  4715.  beq.s .okbigstep
  4716.  move.l #10*256,StepUpVal
  4717. .okbigstep:
  4718.  
  4719.  move.l #$1000000,StepDownVal
  4720.  
  4721.  move.l PLR2_Roompt,a0
  4722.  move.w ToTelZone(a0),d0
  4723.  blt .noteleport
  4724.  
  4725.  move.w ToTelX(a0),newx
  4726.  move.w ToTelZ(a0),newz
  4727.  move.w #-1,CollId
  4728.  move.l #%111111111111111111,CollideFlags
  4729.  bsr Collision
  4730.  tst.b hitwall
  4731.  beq.s .teleport
  4732.  
  4733.  move.w PLR2_xoff,newx
  4734.  move.w PLR2_zoff,newz
  4735.  bra .noteleport
  4736.  
  4737. .teleport:
  4738.  
  4739.  st PLR2_TELEPORTED
  4740.  
  4741.  move.l PLR2_Roompt,a0
  4742.  move.w ToTelZone(a0),d0
  4743.  move.w ToTelX(a0),PLR2_xoff
  4744.  move.w ToTelZ(a0),PLR2_zoff
  4745.  move.l PLR2_yoff,d1
  4746.  sub.l ToZoneFloor(a0),d1
  4747.  move.l ZoneAdds,a0
  4748.  move.l (a0,d0.w*4),a0
  4749.  add.l LEVELDATA,a0
  4750.  move.l a0,PLR2_Roompt
  4751.  add.l ToZoneFloor(a0),d1
  4752.  move.l d1,PLR2s_yoff
  4753.  move.l d1,PLR2_yoff
  4754.  move.l d1,PLR2s_tyoff
  4755.  move.l PLR2_xoff,PLR2s_xoff
  4756.  move.l PLR2_zoff,PLR2s_zoff
  4757.  
  4758.  SAVEREGS
  4759.  move.w #0,Noisex
  4760.  move.w #0,Noisez
  4761.  move.w #26,Samplenum
  4762.  move.w #100,Noisevol
  4763.  move.b #$fa,IDNUM
  4764.  jsr MakeSomeNoise
  4765.  GETREGS
  4766.  
  4767.  bra .cantmove
  4768.  
  4769. .noteleport:
  4770.  
  4771.  move.l PLR2_Roompt,objroom
  4772.  move.w #%100000000000,wallflags
  4773.  move.b PLR2_StoodInTop,StoodInTop
  4774.  
  4775.  move.l #%1011111010111100011,CollideFlags
  4776.  move.w #-1,CollId
  4777.  
  4778.  bsr Collision
  4779.  tst.b hitwall
  4780.  beq.s .nothitanything
  4781.  move.w oldx,PLR2_xoff
  4782.  move.w oldz,PLR2_zoff
  4783.  move.l PLR2_xoff,PLR2s_xoff
  4784.  move.l PLR2_zoff,PLR2s_zoff
  4785.  bra .cantmove
  4786. .nothitanything:
  4787.  
  4788.  move.w #40,extlen
  4789.  move.b #0,awayfromwall
  4790.  
  4791.  clr.b exitfirst
  4792.  clr.b wallbounce
  4793.  bsr MoveObject
  4794.  move.b StoodInTop,PLR2_StoodInTop
  4795.  move.l objroom,PLR2_Roompt
  4796.  move.w newx,PLR2_xoff
  4797.  move.w newz,PLR2_zoff
  4798.  move.l PLR2_xoff,PLR2s_xoff
  4799.  move.l PLR2_zoff,PLR2s_zoff
  4800.  
  4801. .cantmove
  4802.  
  4803.  move.l PLR2_Roompt,a0
  4804.  
  4805.  move.l ToZoneFloor(a0),d0
  4806.  tst.b PLR2_StoodInTop
  4807.  beq.s .notintop
  4808.  move.l ToUpperFloor(a0),d0
  4809. .notintop:
  4810.  
  4811.  adda.w #ToZonePts,a0
  4812.  sub.l PLR2_height,d0
  4813.  move.l d0,PLR2s_tyoff
  4814.  move.w p2_angpos,tmpangpos
  4815.  
  4816. ; move.l (a0),a0        ; jump to viewpoint list
  4817.  * A0 is pointing at a pointer to list of points to rotate
  4818.  move.w (a0)+,d1
  4819.  ext.l d1
  4820.  add.l PLR2_Roompt,d1
  4821.  move.l d1,PLR2_PointsToRotatePtr
  4822.  tst.w (a0)+
  4823.  sne.s DRAWNGRAPHTOP
  4824.  beq.s .nobackgraphics
  4825.  cmp.b #'s',mors
  4826.  bne.s .nobackgraphics
  4827.  move.l a0,-(a7)
  4828.  jsr putinbackdrop 
  4829.  move.l (a7)+,a0
  4830. .nobackgraphics:
  4831.  adda.w #10,a0
  4832.  move.l a0,PLR2_ListOfGraphRooms
  4833.  
  4834. *****************************************************
  4835.  rts
  4836.  
  4837.  
  4838. KeyMap: ds.b 256
  4839.  
  4840. fillscrnwater:
  4841.  dc.w 0
  4842. DONTDOGUN:
  4843.  dc.w 0
  4844.  
  4845. ;temptemp: ds.l 200
  4846. ;temptempptr: dc.l 0
  4847.  
  4848. DrawDisplay:
  4849.  
  4850. ; move.l #temptemp,temptempptr
  4851.  
  4852.  clr.b fillscrnwater
  4853.  
  4854.  move.l #SineTable,a0
  4855.  move.w angpos,d0
  4856.  move.w (a0,d0.w),d6
  4857.  adda.w #2048,a0
  4858.  move.w (a0,d0.w),d7
  4859.  move.w d6,sinval
  4860.  move.w d7,cosval
  4861.  
  4862.  move.l yoff,d0
  4863.  asr.l #8,d0
  4864.  move.w d0,d1
  4865.  add.w #256-32,d1
  4866.  and.w #255,d1
  4867.  move.w d1,wallyoff
  4868.  move.l yoff,d0
  4869.  asr.l #6,d0
  4870.  move.w d0,flooryoff
  4871.  
  4872.  move.w xoff,d6
  4873.  move.w d6,d3
  4874.  asr.w #1,d3
  4875.  add.w d3,d6
  4876.  asr.w #1,d6
  4877.  move.w d6,xoff34
  4878.  
  4879.  move.w zoff,d6
  4880.  move.w d6,d3
  4881.  asr.w #1,d3
  4882.  add.w d3,d6
  4883.  asr.w #1,d6
  4884.  move.w d6,zoff34
  4885.  
  4886.  bsr RotateLevelPts
  4887.  bsr RotateObjectPts
  4888.  bsr CalcPLR1InLine
  4889.  
  4890.  
  4891.  cmp.b #'n',mors
  4892.  bne.s doplr2too
  4893.  move.l PLR2_Obj,a0
  4894.  move.w #-1,12(a0)
  4895.  move.w #-1,GraphicRoom(a0)
  4896.  bra noplr2either
  4897.  
  4898. doplr2too:
  4899.  bsr CalcPLR2InLine
  4900. noplr2either:
  4901.  
  4902.  move.l endoflist,a0
  4903. ; move.w #-1,(a0)
  4904.  
  4905. ; move.l #FinalOrder,a0
  4906.  
  4907.  
  4908. subroomloop:
  4909. ; move.w (a0)+,d7
  4910.  move.w -(a0),d7
  4911.  blt jumpoutofrooms
  4912.  
  4913. ; bsr setlrclip
  4914. ; move.w leftclip,d0
  4915. ; cmp.w rightclip,d0
  4916. ; bge subroomloop
  4917.  move.l a0,-(a7)
  4918.  
  4919.  move.l ZoneAdds,a0
  4920.  move.l (a0,d7.w*4),a0
  4921.  add.l LEVELDATA,a0
  4922.  move.l ToZoneRoof(a0),SplitHeight
  4923.  move.l a0,ROOMBACK
  4924.  
  4925.  move.l ZoneGraphAdds,a0
  4926.  move.l 4(a0,d7.w*8),a2
  4927.  move.l (a0,d7.w*8),a0
  4928.  
  4929.  add.l LEVELGRAPHICS,a0
  4930.  add.l LEVELGRAPHICS,a2
  4931.  move.l a2,ThisRoomToDraw+4
  4932.  move.l a0,ThisRoomToDraw
  4933.  
  4934.  move.l ListOfGraphRooms,a1
  4935.  
  4936.  
  4937.  
  4938. finditit:
  4939.  tst.w (a1)
  4940.  blt nomoretodoatall
  4941.  cmp.w (a1),d7
  4942.  beq outoffind
  4943.  adda.w #8,a1
  4944.  bra finditit
  4945.  
  4946. outoffind:
  4947.  
  4948.  move.l a1,-(a7)
  4949.  
  4950.  
  4951.  move.w #0,leftclip
  4952.  move.w RIGHTX,rightclip
  4953.  moveq #0,d7
  4954.  move.w 2(a1),d7
  4955.  blt.s outofrcliplop
  4956.  move.l LEVELCLIPS,a0
  4957.  lea (a0,d7.l*2),a0
  4958.  
  4959.  tst.w (a0)
  4960.  blt outoflcliplop
  4961.  
  4962.  bsr NEWsetlclip
  4963.  
  4964. intolcliplop:        ; clips
  4965.  tst.w (a0)
  4966.  blt outoflcliplop
  4967.  
  4968.  bsr NEWsetlclip 
  4969.  bra intolcliplop
  4970.  
  4971. outoflcliplop:
  4972.  
  4973.  addq #2,a0
  4974.  
  4975.  tst.w (a0)
  4976.  blt outofrcliplop
  4977.  
  4978.  bsr NEWsetrclip
  4979.  
  4980. intorcliplop:        ; clips
  4981.  tst.w (a0)
  4982.  blt outofrcliplop
  4983.  
  4984.  bsr NEWsetrclip 
  4985.  bra intorcliplop
  4986.  
  4987. outofrcliplop:
  4988.  
  4989.  
  4990.  move.w leftclip,d0
  4991.  cmp.w RIGHTX,d0
  4992.  bge dontbothercantseeit
  4993.  move.w rightclip,d1
  4994.  blt dontbothercantseeit
  4995.  cmp.w d1,d0
  4996.  bge dontbothercantseeit
  4997.  
  4998.  move.l yoff,d0
  4999.  cmp.l SplitHeight,d0
  5000.  blt botfirst
  5001.  
  5002.  move.l ThisRoomToDraw+4,a0
  5003.  cmp.l LEVELGRAPHICS,a0
  5004.  beq.s noupperroom
  5005.  st DOUPPER
  5006.  
  5007.  move.l ROOMBACK,a1
  5008.  move.l ToUpperRoof(a1),TOPOFROOM
  5009.  move.l ToUpperFloor(a1),BOTOFROOM
  5010.  
  5011.  move.l #CurrentPointBrights+4,PointBrightsPtr
  5012.  bsr dothisroom
  5013. noupperroom:
  5014.  move.l ThisRoomToDraw,a0
  5015.  clr.b DOUPPER
  5016.  move.l #CurrentPointBrights,PointBrightsPtr
  5017.  
  5018.  move.l ROOMBACK,a1
  5019.  move.l ToZoneRoof(a1),d0
  5020.  move.l d0,TOPOFROOM
  5021.  move.l ToZoneFloor(a1),d1
  5022.  move.l d1,BOTOFROOM
  5023.  
  5024.  move.l ToZoneWater(a1),d2
  5025.  cmp.l yoff,d2
  5026.  blt.s .abovefirst
  5027.  move.l d2,BEFOREWATTOP
  5028.  move.l d1,BEFOREWATBOT
  5029.  move.l d2,AFTERWATBOT
  5030.  move.l d0,AFTERWATTOP
  5031.  bra.s .belowfirst
  5032. .abovefirst:
  5033.  move.l d0,BEFOREWATTOP
  5034.  move.l d2,BEFOREWATBOT
  5035.  move.l d1,AFTERWATBOT
  5036.  move.l d2,AFTERWATTOP
  5037. .belowfirst:
  5038.  
  5039.  bsr dothisroom
  5040.  
  5041.  bra dontbothercantseeit
  5042. botfirst:
  5043.  
  5044.  move.l ThisRoomToDraw,a0
  5045.  clr.b DOUPPER
  5046.  move.l #CurrentPointBrights,PointBrightsPtr
  5047.  
  5048.  move.l ROOMBACK,a1
  5049.  move.l ToZoneRoof(a1),d0
  5050.  move.l d0,TOPOFROOM
  5051.  move.l ToZoneFloor(a1),d1
  5052.  move.l d1,BOTOFROOM
  5053.  
  5054.  move.l ToZoneWater(a1),d2
  5055.  cmp.l yoff,d2
  5056.  blt.s .abovefirst
  5057.  move.l d2,BEFOREWATTOP
  5058.  move.l d1,BEFOREWATBOT
  5059.  move.l d2,AFTERWATBOT
  5060.  move.l d0,AFTERWATTOP
  5061.  bra.s .belowfirst
  5062. .abovefirst:
  5063.  move.l d0,BEFOREWATTOP
  5064.  move.l d2,BEFOREWATBOT
  5065.  move.l d1,AFTERWATBOT
  5066.  move.l d2,AFTERWATTOP
  5067. .belowfirst:
  5068.  
  5069.  
  5070.  bsr dothisroom
  5071.  move.l ThisRoomToDraw+4,a0
  5072.  cmp.l LEVELGRAPHICS,a0
  5073.  beq.s noupperroom2
  5074.  move.l #CurrentPointBrights+4,PointBrightsPtr
  5075.  
  5076.  move.l ROOMBACK,a1
  5077.  move.l ToUpperRoof(a1),TOPOFROOM
  5078.  move.l ToUpperFloor(a1),BOTOFROOM
  5079.  
  5080.  st DOUPPER
  5081.  bsr dothisroom
  5082. noupperroom2:
  5083.  
  5084. dontbothercantseeit:
  5085. pastemp:
  5086.  
  5087.  move.l (a7)+,a1
  5088.  move.l ThisRoomToDraw,a0
  5089.  move.w (a0),d7
  5090.  
  5091.  adda.w #8,a1
  5092.  bra finditit
  5093.  
  5094. nomoretodoatall:
  5095.  
  5096.  move.l (a7)+,a0
  5097.  
  5098.  bra subroomloop
  5099.  
  5100. jumpoutofrooms:
  5101.  
  5102.  
  5103.  tst.b DONTDOGUN
  5104.  bne NOGUNLOOK
  5105.  
  5106.  cmp.b #'s',mors
  5107.  beq.s drawslavegun
  5108.  
  5109.  moveq #0,d0
  5110.  move.b PLR1_GunSelected,d0
  5111.  moveq #0,d1
  5112.  move.b PLR1_GunFrame,d1
  5113. ; bsr DRAWINGUN
  5114.  bra drawngun
  5115.  
  5116. drawslavegun
  5117.  moveq #0,d0
  5118.  move.b PLR2_GunSelected,d0
  5119.  moveq #0,d1
  5120.  move.b PLR2_GunFrame,d1
  5121. ; bsr DRAWINGUN
  5122.  
  5123. drawngun:
  5124.  
  5125. NOGUNLOOK:
  5126.  
  5127.  moveq #0,d1
  5128.  move.b PLR1_GunFrame,d1
  5129.  sub.w TempFrames,d1
  5130.  bgt.s .nn
  5131.  moveq #0,d1
  5132. .nn
  5133.  move.b d1,PLR1_GunFrame
  5134.  
  5135.  ble.s .donefire
  5136.  sub.b #1,PLR1_GunFrame
  5137. .donefire:
  5138.  
  5139.  moveq #0,d1
  5140.  move.b PLR2_GunFrame,d1
  5141.  sub.w TempFrames,d1
  5142.  bgt.s .nn2
  5143.  moveq #0,d1
  5144. .nn2
  5145.  move.b d2,PLR2_GunFrame
  5146.  
  5147.  ble.s .donefire2
  5148.  sub.b #1,PLR2_GunFrame
  5149. .donefire2:
  5150.  
  5151.  tst.b DOANYWATER
  5152.  beq.s nowaterfull
  5153.  
  5154.  move.w #231,d0
  5155.  move.l FASTBUFFER,a0
  5156.  tst.b fillscrnwater
  5157.  beq nowaterfull
  5158.  bgt oknothalf
  5159.  moveq #119,d0
  5160.  add.l #320*120*2,a0
  5161. oknothalf:
  5162.  
  5163.  bclr.b #1,$bfe001
  5164.  
  5165.  move.l #brightentab+512*4,a2
  5166.  moveq #0,d2
  5167.  
  5168.  tst.b FULLSCR
  5169.  bne.s DOALLSCREEN
  5170.  
  5171. DOSOMESCREEN:
  5172.  
  5173.  move.w #159,d0
  5174. .fw:
  5175.  move.w #191,d1
  5176. .fwa:
  5177.  move.b (a0),d2
  5178.  move.b (a2,d2.w*2),(a0)+
  5179.  dbra d1,.fwa
  5180.  add.w #(320-192),a0
  5181.  dbra d0,.fw
  5182.  rts
  5183.  
  5184. DOALLSCREEN:
  5185.  
  5186. fw:
  5187.  move.w #287,d1
  5188. fwa:
  5189.  move.b (a0),d2
  5190.  move.b (a2,d2.w*2),(a0)+
  5191.  dbra d1,fwa
  5192.  add.w #32,a0
  5193.  dbra d0,fw
  5194.  
  5195. ; move.l frompt,a0
  5196. ; add.l #104*4*60,a0
  5197. ; move.w #31,d0
  5198. ;fw:
  5199. ; move.w d5,d1
  5200. ; move.l a0,a1
  5201. ;fwd:
  5202. ;val SET 104*4*19
  5203. ; REPT 20
  5204. ; and.w #$ff,val(a1)
  5205. ;val SET val-104*4
  5206. ; ENDR
  5207. ; sub.l #104*4*20,a1
  5208. ; dbra d1,fwd
  5209. ; addq #4,a0
  5210. ; dbra d0,fw
  5211. ;
  5212. ; addq #4,a0
  5213. ;
  5214. ; move.w #31,d0
  5215. ;sw:
  5216. ; move.w d5,d1
  5217. ; move.l a0,a1
  5218. ;swd:
  5219. ;val SET 104*4*19
  5220. ; REPT 20
  5221. ; and.w #$ff,val(a1)
  5222. ;val SET val-104*4
  5223. ; ENDR
  5224. ; sub.l #104*4*20,a1
  5225. ; dbra d1,swd
  5226. ; addq #4,a0
  5227. ; dbra d0,sw
  5228. ;
  5229. ; addq #4,a0
  5230. ;
  5231. ; move.w #31,d0
  5232. ;tw:
  5233. ; move.w d5,d1
  5234. ; move.l a0,a1
  5235. ;twd:
  5236. ;val SET 104*4*19
  5237. ; REPT 20
  5238. ; and.w #$ff,val(a1)
  5239. ;val SET val-104*4
  5240. ; ENDR
  5241. ; sub.l #104*4*20,a1
  5242. ; dbra d1,twd
  5243. ; addq #4,a0
  5244. ; dbra d0,tw
  5245. ;
  5246.  rts
  5247.  
  5248. nowaterfull:
  5249.  bset.b #1,$bfe001
  5250.  rts
  5251.  
  5252. prot9: dc.w 0
  5253.  
  5254. ;TempBuffer: ds.l 100 
  5255.  
  5256. prot8: dc.w 0
  5257.  
  5258. ClipTable: ds.l 30
  5259. EndOfClipPt: dc.l 0
  5260. DOUPPER: dc.w 0
  5261.  
  5262. RealTable:
  5263.  dc.l prot1-78935450
  5264.  dc.l prot2-78935450
  5265.  dc.l prot3-78935450
  5266.  dc.l prot4-78935450
  5267.  dc.l prot5-78935450
  5268.  dc.l prot6-78935450
  5269.  dc.l prot7-78935450
  5270.  dc.l prot8-78935450
  5271.  dc.l prot9-78935450
  5272.  dc.l protA-78935450
  5273.  
  5274. dothisroom
  5275.  
  5276.  move.w (a0)+,d0
  5277.  move.w d0,currzone
  5278.  move.w d0,d1
  5279.  muls #40,d1
  5280.  add.l #BIGMAP,d1
  5281.  move.l d1,BIGPTR
  5282.  move.w d0,d1
  5283.  ext.l d1
  5284.  asl.w #2,d1
  5285.  add.l #COMPACTMAP,d1
  5286.  move.l d1,COMPACTPTR
  5287.  add.l #4,d1
  5288.  cmp.l LASTZONE,d1
  5289.  ble.s .nochange
  5290.  move.l d1,LASTZONE
  5291. .nochange:
  5292.  
  5293.  move.l #ZoneBrightTable,a1
  5294.  move.l (a1,d0.w*4),d1
  5295.  tst.b DOUPPER
  5296.  bne.s .okbot
  5297.  swap d1
  5298. .okbot:
  5299.  move.w d1,ZoneBright
  5300.  
  5301. polyloop:
  5302.  move.w (a0)+,d0
  5303.  move.w d0,WALLIDENT
  5304.  and.w #$ff,d0
  5305.  tst.b d0
  5306.  blt jumpoutofloop
  5307.  beq itsawall
  5308.  cmp.w #3,d0
  5309.  beq itsasetclip
  5310.  blt itsafloor
  5311.  cmp.w #4,d0
  5312.  beq itsanobject
  5313.  cmp.w #5,d0
  5314.  beq itsanarc
  5315.  cmp.w #6,d0
  5316.  beq itsalightbeam
  5317.  cmp.w #7,d0
  5318.  beq.s itswater
  5319.  cmp.w #9,d0
  5320.  ble itsachunkyfloor
  5321.  cmp.w #11,d0
  5322.  ble itsabumpyfloor
  5323.  cmp.w #12,d0
  5324.  beq.s itsbackdrop
  5325.  cmp.w #13,d0
  5326.  beq.s itsaseewall
  5327.  
  5328.  bra polyloop
  5329.  
  5330. itsaseewall:
  5331.  st seethru
  5332.  jsr itsawalldraw
  5333.  bra polyloop
  5334.  
  5335. itsbackdrop:
  5336.  jsr putinbackdrop
  5337.  bra polyloop
  5338.  
  5339. itswater:
  5340.  PROTHCHECK
  5341.  move.w #2,SMALLIT
  5342.  move.w #3,d0
  5343.  clr.b gourfloor
  5344.  move.l #FloorLine,LineToUse
  5345.  st usewater
  5346.  clr.b usebumps
  5347.  jsr itsafloordraw
  5348.  bra polyloop
  5349.  
  5350. itsanarc:
  5351.  jsr CurveDraw
  5352.  bra polyloop
  5353.  
  5354. itsanobject:
  5355.  jsr ObjDraw
  5356.  bra polyloop
  5357.  
  5358. itsalightbeam:
  5359.  jsr LightDraw
  5360.  bra polyloop
  5361.  
  5362. itsabumpyfloor:
  5363.  move.w #1,SMALLIT
  5364.  sub.w #9,d0
  5365.  st usebumps
  5366.  st smoothbumps
  5367.  clr.b usewater
  5368.  move.l #BumpLine,LineToUse
  5369.  jsr itsafloordraw
  5370.  bra polyloop
  5371.  
  5372. itsachunkyfloor:
  5373.  move.w #1,SMALLIT
  5374.  subq.w #7,d0
  5375.  st usebumps
  5376.  sub.w #12,topclip
  5377. ; add.w #10,botclip
  5378.  clr.b smoothbumps
  5379.  clr.b usewater
  5380.  move.l #BumpLine,LineToUse
  5381.  jsr itsafloordraw
  5382.  add.w #12,topclip
  5383. ; sub.w #10,botclip
  5384.  bra polyloop 
  5385.  
  5386. itsafloor:
  5387.  
  5388.  move.l PointBrightsPtr,FloorPtBrights
  5389.  
  5390.  move.w currzone,d1
  5391.  muls #80,d1
  5392.  
  5393.  cmp.w #2,d0
  5394.  bne.s .nfl
  5395.  add.l #2,d1
  5396. .nfl
  5397.  add.l d1,FloorPtBrights
  5398.  
  5399.  move.w #1,SMALLIT
  5400.  
  5401.  movem.l a0/d0,-(a7)
  5402.  move.l $4.w,a6
  5403.  jsr _LVOSuperState(a6)
  5404.  move.l d0,SSTACK
  5405.  movem.l (a7)+,a0/d0
  5406.  
  5407.  move.l #SimpleFloorLine,LineToUse
  5408. * 1,2 = floor/roof
  5409.  clr.b usewater
  5410.  clr.b usebumps
  5411.  move.b #0,gourfloor    
  5412.  jsr itsafloordraw
  5413.  move.l a0,-(a7)
  5414.  move.l $4.w,a6
  5415.  move.l SSTACK,d0
  5416.  jsr _LVOUserState(a6)
  5417.  move.l (a7)+,a0
  5418.  bra polyloop
  5419. itsasetclip:
  5420.  bra polyloop
  5421. itsawall:
  5422.  clr.b seethru
  5423. ; move.l #stripbuffer,a1
  5424.  jsr itsawalldraw
  5425.  bra polyloop
  5426.  
  5427. jumpoutofloop:
  5428.  rts
  5429.  
  5430. LASTZONE: dc.l 0
  5431. COMPACTPTR: dc.l 0
  5432. BIGPTR: dc.l 0
  5433. WALLIDENT: dc.w 0
  5434. SMALLIT: dc.w 0
  5435. GOURSEL: dc.w 0
  5436. ThisRoomToDraw: dc.l 0,0
  5437. SplitHeight: dc.l 0
  5438.  
  5439.  include "ab3:CHEESESAUCE/OrderZones"
  5440.  
  5441. ReadMouse:
  5442.  move.l #$dff000,a6
  5443.  clr.l d0
  5444.  clr.l d1
  5445.  move.w $a(a6),d0
  5446.  lsr.w #8,d0
  5447.  ext.l d0
  5448.  move.w d0,d3
  5449.  move.w oldmy,d2
  5450.  sub.w d2,d0
  5451.  
  5452.  cmp.w #127,d0
  5453.  blt nonegy
  5454.  move.w #255,d1
  5455.  sub.w d0,d1
  5456.  move.w d1,d0
  5457.  neg.w d0
  5458. nonegy:
  5459.  
  5460.  cmp.w #-127,d0
  5461.  bge nonegy2
  5462.  move.w #255,d1
  5463.  add.w d0,d1
  5464.  move.w d1,d0
  5465. nonegy2:
  5466.  
  5467.  add.b d0,d2
  5468.  add.w d0,oldy2
  5469.  move.w d2,oldmy
  5470.  move.w d2,d0
  5471.  
  5472.  move.w oldy2,d0
  5473.  move.w d0,ymouse
  5474.  
  5475.  clr.l d0
  5476.  clr.l d1
  5477.  move.w $a(a6),d0
  5478.  ext.w d0
  5479.  ext.l d0
  5480.  move.w d0,d3
  5481.  move.w oldmx,d2
  5482.  sub.w d2,d0
  5483.  
  5484.  cmp.w #127,d0
  5485.  blt nonegx
  5486.  move.w #255,d1
  5487.  sub.w d0,d1
  5488.  move.w d1,d0
  5489.  neg.w d0
  5490. nonegx:
  5491.  
  5492.  cmp.w #-127,d0
  5493.  bge nonegx2
  5494.  move.w #255,d1
  5495.  add.w d0,d1
  5496.  move.w d1,d0
  5497. nonegx2:
  5498.  
  5499.  add.b d0,d2
  5500.  move.w d0,d1
  5501.  move.w d2,oldmx
  5502.  
  5503.  move.w #$0,$dff034
  5504.  
  5505.  add.w d0,oldx2
  5506.  move.w oldx2,d0
  5507.  and.w #2047,d0
  5508.  move.w d0,oldx2
  5509.  
  5510.  asl.w #2,d0
  5511.  sub.w prevx,d0
  5512.  add.w d0,prevx
  5513.  add.w d0,angpos
  5514.  move.w #0,lrs
  5515.  rts
  5516.  
  5517. noturn:
  5518.  
  5519. ; got to move lr instead. 
  5520.  
  5521. ; d1 = speed moved l/r
  5522.  
  5523.  move.w d1,lrs
  5524.  
  5525.  rts
  5526.  
  5527. lrs: dc.w 0
  5528. prevx: dc.w 0
  5529.  
  5530. angpos: dc.w 0
  5531. mang: dc.w 0
  5532. oldymouse: dc.w 0
  5533. xmouse: dc.w 0
  5534. ymouse: dc.w 0
  5535. oldx2: dc.w 0
  5536. oldmx: dc.w 0
  5537. oldmy: dc.w 0
  5538. oldy2: dc.w 0
  5539.  
  5540. MAPON: dc.w $0
  5541. REALMAPON: dc.w 0
  5542.  
  5543. RotateLevelPts:
  5544.  
  5545.  tst.b REALMAPON
  5546.  beq ONLYTHELONELY
  5547.  
  5548.  move.w sinval,d6
  5549.  swap d6
  5550.  move.w cosval,d6
  5551.  move.l Points,a3
  5552.  move.l #Rotated,a1
  5553.  move.l #OnScreen,a2
  5554.  move.w xoff,d4
  5555.  move.w zoff,d5
  5556.  
  5557. ; move.w #$c40,$dff106
  5558. ; move.w #$f00,$dff180
  5559.  
  5560.  move.w NumLevPts,d7
  5561.  
  5562.  tst.b FULLSCR
  5563.  bne BIGALL
  5564.  
  5565. pointrotlop2:
  5566.  move.w (a3)+,d0
  5567.  sub.w d4,d0
  5568.  move.w d0,d2
  5569.  move.w (a3)+,d1
  5570.  sub.w d5,d1
  5571.  muls d6,d2
  5572.  swap d6
  5573.  move.w d1,d3
  5574.  muls d6,d3
  5575.  sub.l d3,d2
  5576.  add.l d2,d2
  5577.  swap d2
  5578.  ext.l d2
  5579.  asl.l #7,d2
  5580.  add.l xwobble,d2
  5581.  move.l d2,(a1)+
  5582.  
  5583.  muls d6,d0
  5584.  swap d6
  5585.  muls d6,d1
  5586.  add.l d0,d1
  5587.  asl.l #1,d1
  5588.  swap d1
  5589. ; ext.l d1
  5590. ; divs #3,d1
  5591.  move.l d1,(a1)+
  5592.  
  5593.  tst.w d1
  5594.  bgt.s ptnotbehind
  5595.  tst.w d2
  5596.  bgt.s onrightsomewhere
  5597.  move.w #0,d2
  5598.  bra putin
  5599. onrightsomewhere:
  5600.  move.w RIGHTX,d2
  5601.  bra putin
  5602. ptnotbehind:
  5603.  
  5604.  divs d1,d2
  5605.  add.w MIDDLEX,d2
  5606. putin:
  5607.  move.w d2,(a2)+
  5608.  
  5609.  dbra d7,pointrotlop2
  5610. outofpointrot:
  5611.   rts
  5612.  
  5613.  
  5614. BIGALL:
  5615.  
  5616. pointrotlop2B:
  5617.  move.w (a3)+,d0
  5618.  sub.w d4,d0
  5619.  move.w d0,d2
  5620.  move.w (a3)+,d1
  5621.  sub.w d5,d1
  5622.  muls d6,d2
  5623.  swap d6
  5624.  move.w d1,d3
  5625.  muls d6,d3
  5626.  sub.l d3,d2
  5627.  add.l d2,d2
  5628.  swap d2
  5629.  ext.l d2
  5630.  asl.l #7,d2
  5631.  add.l xwobble,d2
  5632.  move.l d2,(a1)+
  5633.  
  5634.  muls d6,d0
  5635.  swap d6
  5636.  muls d6,d1
  5637.  add.l d0,d1
  5638.  asl.l #2,d1
  5639.  swap d1
  5640.  ext.l d1
  5641.  divs #3,d1
  5642.  move.l d1,(a1)+
  5643.  
  5644.  tst.w d1
  5645.  bgt.s ptnotbehindB
  5646.  tst.w d2
  5647.  bgt.s onrightsomewhereB
  5648.  move.w #0,d2
  5649.  bra putinB
  5650. onrightsomewhereB:
  5651.  move.w RIGHTX,d2
  5652.  bra putinB
  5653. ptnotbehindB:
  5654.  
  5655.  divs d1,d2
  5656.  add.w MIDDLEX,d2
  5657. putinB:
  5658.  move.w d2,(a2)+
  5659.  
  5660.  dbra d7,pointrotlop2B
  5661.   rts
  5662.  
  5663.  
  5664. ONLYTHELONELY:
  5665.  
  5666.  move.w sinval,d6
  5667.  swap d6
  5668.  move.w cosval,d6
  5669.  
  5670.  move.l PointsToRotatePtr,a0
  5671.  move.l Points,a3
  5672.  move.l #Rotated,a1
  5673.  move.l #OnScreen,a2
  5674.  move.w xoff,d4
  5675.  move.w zoff,d5
  5676.  
  5677. ; move.w #$c40,$dff106
  5678. ; move.w #$f00,$dff180
  5679.  
  5680.  tst.b FULLSCR
  5681.  bne BIGLONELY
  5682.  
  5683. pointrotlop:
  5684.  move.w (a0)+,d7
  5685.  blt outofpointrot
  5686.  
  5687.  move.w (a3,d7*4),d0
  5688.  sub.w d4,d0
  5689.  move.w d0,d2
  5690.  move.w 2(a3,d7*4),d1
  5691.  sub.w d5,d1
  5692.  muls d6,d2
  5693.  swap d6
  5694.  move.w d1,d3
  5695.  muls d6,d3
  5696.  sub.l d3,d2
  5697.  add.l d2,d2
  5698.  swap d2
  5699.  ext.l d2
  5700.  asl.l #7,d2
  5701.  add.l xwobble,d2
  5702.  move.l d2,(a1,d7*8)
  5703.  
  5704.  muls d6,d0
  5705.  swap d6
  5706.  muls d6,d1
  5707.  add.l d0,d1
  5708.  asl.l #1,d1
  5709.  swap d1
  5710. ; ext.l d1
  5711. ; divs #3,d1
  5712.  move.l d1,4(a1,d7*8)
  5713.  
  5714.  tst.w d1
  5715.  bgt.s .ptnotbehind
  5716.  tst.w d2
  5717.  bgt.s .onrightsomewhere
  5718.  move.w #0,d2
  5719.  bra .putin
  5720. .onrightsomewhere:
  5721.  move.w RIGHTX,d2
  5722.  bra .putin
  5723. .ptnotbehind:
  5724.  
  5725.  divs d1,d2
  5726.  add.w MIDDLEX,d2
  5727. .putin:
  5728.  move.w d2,(a2,d7*2)
  5729.  
  5730.  bra pointrotlop
  5731.  
  5732. ; move.w #$c40,$dff106
  5733. ; move.w #$ff0,$dff180
  5734.  
  5735.  rts
  5736.  
  5737. BIGLONELY:
  5738.  
  5739. .pointrotlop:
  5740.  move.w (a0)+,d7
  5741.  blt.s .outofpointrot
  5742.  
  5743.  move.w (a3,d7*4),d0
  5744.  sub.w d4,d0
  5745.  move.w d0,d2
  5746.  move.w 2(a3,d7*4),d1
  5747.  sub.w d5,d1
  5748.  muls d6,d2
  5749.  swap d6
  5750.  move.w d1,d3
  5751.  muls d6,d3
  5752.  sub.l d3,d2
  5753.  add.l d2,d2
  5754.  swap d2
  5755.  ext.l d2
  5756.  asl.l #7,d2
  5757.  add.l xwobble,d2
  5758.  move.l d2,(a1,d7*8)
  5759.  
  5760.  muls d6,d0
  5761.  swap d6
  5762.  muls d6,d1
  5763.  add.l d0,d1
  5764.  asl.l #2,d1
  5765.  swap d1
  5766.  ext.l d1
  5767.  divs #3,d1
  5768.  move.l d1,4(a1,d7*8)
  5769.  
  5770.  tst.w d1
  5771.  bgt.s .ptnotbehind
  5772.  tst.w d2
  5773.  bgt.s .onrightsomewhere
  5774.  move.w #0,d2
  5775.  bra .putin
  5776. .onrightsomewhere:
  5777.  move.w RIGHTX,d2
  5778.  bra .putin
  5779. .ptnotbehind:
  5780.  
  5781.  divs d1,d2
  5782.  add.w MIDDLEX,d2
  5783. .putin:
  5784.  move.w d2,(a2,d7*2)
  5785.  
  5786.  bra .pointrotlop
  5787.  
  5788. .outofpointrot:
  5789. ; move.w #$c40,$dff106
  5790. ; move.w #$ff0,$dff180
  5791.  
  5792.  rts
  5793.  
  5794.  
  5795. PLR1_ObjDists
  5796.  ds.w 250
  5797. PLR2_ObjDists
  5798.  ds.w 250
  5799.  
  5800. CalcPLR1InLine:
  5801.  
  5802.  move.w PLR1_sinval,d5
  5803.  move.w PLR1_cosval,d6
  5804.  move.l ObjectData,a4
  5805.  move.l ObjectPoints,a0
  5806.  move.w NumObjectPoints,d7
  5807.  move.l #PLR1_ObsInLine,a2
  5808.  move.l #PLR1_ObjDists,a3
  5809.  
  5810. .objpointrotlop:
  5811.  
  5812.  cmp.b #3,16(a4)
  5813.  beq.s .itaux
  5814.  
  5815.  move.w (a0),d0
  5816.  sub.w PLR1_xoff,d0
  5817.  move.w 4(a0),d1
  5818.  addq #8,a0
  5819.  
  5820.  tst.w 12(a4)
  5821.  blt .noworkout
  5822.  
  5823.  moveq #0,d2
  5824.  move.b 16(a4),d2
  5825.  ;move.l #ColBoxTable,a6
  5826.  ;lea (a6,d2.w*8),a6
  5827.  
  5828.  sub.w PLR1_zoff,d1
  5829.  move.w d0,d2
  5830.  muls d6,d2
  5831.  move.w d1,d3
  5832.  muls d5,d3
  5833.  sub.l d3,d2
  5834.  add.l d2,d2
  5835.  
  5836.  bgt.s .okh
  5837.  neg.l d2
  5838. .okh:
  5839.  swap d2
  5840.  
  5841.  muls d5,d0
  5842.  muls d6,d1
  5843.  add.l d0,d1
  5844.  asl.l #2,d1
  5845.  swap d1
  5846.  moveq #0,d3
  5847.  
  5848.  tst.w d1
  5849.  ble.s .notinline
  5850.  asr.w #1,d2
  5851.  cmp.w #80,d2
  5852.  bgt.s .notinline
  5853.  
  5854.  st d3
  5855. .notinline
  5856.  move.b d3,(a2)+
  5857.  
  5858.  move.w d1,(a3)+
  5859.  
  5860.  add.w #64,a4
  5861.  dbra d7,.objpointrotlop
  5862.  
  5863.  rts
  5864.  
  5865. .itaux:
  5866.  add.w #64,a4
  5867.  bra .objpointrotlop
  5868.  
  5869. .noworkout:
  5870.  move.b #0,(a2)+
  5871.  move.w #0,(a3)+
  5872.  add.w #64,a4
  5873.  dbra d7,.objpointrotlop
  5874.  rts
  5875.  
  5876.  
  5877. CalcPLR2InLine:
  5878.  
  5879.  move.w PLR2_sinval,d5
  5880.  move.w PLR2_cosval,d6
  5881.  move.l ObjectData,a4
  5882.  move.l ObjectPoints,a0
  5883.  move.w NumObjectPoints,d7
  5884.  move.l #PLR2_ObsInLine,a2
  5885.  move.l #PLR2_ObjDists,a3
  5886.  
  5887. .objpointrotlop:
  5888.  
  5889.  cmp.b #3,16(a4)
  5890.  beq.s .itaux
  5891.  
  5892.  move.w (a0),d0
  5893.  sub.w PLR2_xoff,d0
  5894.  move.w 4(a0),d1
  5895.  addq #8,a0
  5896.  
  5897.  tst.w 12(a4)
  5898.  blt .noworkout
  5899.  
  5900.  moveq #0,d2
  5901.  move.b 16(a4),d2
  5902. ; move.l #ColBoxTable,a6
  5903. ; lea (a6,d2.w*8),a6
  5904.  
  5905.  sub.w PLR2_zoff,d1
  5906.  move.w d0,d2
  5907.  muls d6,d2
  5908.  move.w d1,d3
  5909.  muls d5,d3
  5910.  sub.l d3,d2
  5911.  add.l d2,d2
  5912.  
  5913.  bgt.s .okh
  5914.  neg.l d2
  5915. .okh:
  5916.  swap d2
  5917.  
  5918.  muls d5,d0
  5919.  muls d6,d1
  5920.  add.l d0,d1
  5921.  asl.l #2,d1
  5922.  swap d1
  5923.  moveq #0,d3
  5924.  
  5925.  tst.w d1
  5926.  ble.s .notinline
  5927.  asr.w #1,d2
  5928.  cmp.w (a6),d2
  5929.  bgt.s .notinline
  5930.  
  5931.  st d3
  5932. .notinline
  5933.  move.b d3,(a2)+
  5934.  
  5935.  move.w d1,(a3)+
  5936.  
  5937.  add.w #64,a4
  5938.  dbra d7,.objpointrotlop
  5939.  
  5940.  rts
  5941.  
  5942. .itaux:
  5943.  add.w #64,a4
  5944.  bra .objpointrotlop
  5945.  
  5946. .noworkout:
  5947.  move.w #0,(a3)+
  5948.  move.b #0,(a2)+
  5949.  add.w #64,a4
  5950.  dbra d7,.objpointrotlop
  5951.  rts
  5952.  
  5953.  
  5954. RotateObjectPts:
  5955.  
  5956.  move.w sinval,d5
  5957.  move.w cosval,d6
  5958.  
  5959.  move.l ObjectData,a4
  5960.  move.l ObjectPoints,a0
  5961.  move.w NumObjectPoints,d7
  5962.  move.l #ObjRotated,a1
  5963.  
  5964.  tst.b FULLSCR
  5965.  bne BIGOBJPTS
  5966.  
  5967. .objpointrotlop:
  5968.  
  5969.  cmp.b #3,16(a4)
  5970.  beq.s .itaux
  5971.  
  5972.  move.w (a0),d0
  5973.  sub.w xoff,d0
  5974.  move.w 4(a0),d1
  5975.  addq #8,a0
  5976.  
  5977.  tst.w 12(a4)
  5978.  blt .noworkout
  5979.  
  5980.  sub.w zoff,d1
  5981.  move.w d0,d2
  5982.  muls d6,d2
  5983.  move.w d1,d3
  5984.  muls d5,d3
  5985.  sub.l d3,d2
  5986.  
  5987.  
  5988.  add.l d2,d2
  5989.  swap d2
  5990.  move.w d2,(a1)+
  5991.  
  5992.  muls d5,d0
  5993.  muls d6,d1
  5994.  add.l d0,d1
  5995.  asl.l #2,d1
  5996.  swap d1
  5997. ; ext.l d1
  5998. ; divs #3,d1
  5999.  moveq #0,d3
  6000.  
  6001.  move.w d1,(a1)+
  6002.  ext.l d2
  6003.  asl.l #7,d2
  6004.  add.l xwobble,d2
  6005.  move.l d2,(a1)+
  6006.  
  6007.  dbra d7,.objpointrotlop
  6008.  
  6009.  rts
  6010.  
  6011. .itaux:
  6012.  add.w #64,a4
  6013.  bra .objpointrotlop
  6014.  
  6015. .noworkout:
  6016.   move.l #0,(a1)+
  6017.   move.l #0,(a1)+
  6018.   add.w #64,a4
  6019.   dbra d7,.objpointrotlop
  6020.   rts
  6021.   
  6022. BIGOBJPTS:
  6023.  
  6024. .objpointrotlop:
  6025.  
  6026.  cmp.b #3,16(a4)
  6027.  beq.s .itaux
  6028.  
  6029.  move.w (a0),d0
  6030.  sub.w xoff,d0
  6031.  move.w 4(a0),d1
  6032.  addq #8,a0
  6033.  
  6034.  tst.w 12(a4)
  6035.  blt .noworkout
  6036.  
  6037.  sub.w zoff,d1
  6038.  move.w d0,d2
  6039.  muls d6,d2
  6040.  move.w d1,d3
  6041.  muls d5,d3
  6042.  sub.l d3,d2
  6043.  
  6044.  
  6045.  add.l d2,d2
  6046.  swap d2
  6047.  move.w d2,(a1)+
  6048.  
  6049.  muls d5,d0
  6050.  muls d6,d1
  6051.  add.l d0,d1
  6052.  asl.l #2,d1
  6053.  swap d1
  6054.  ext.l d1
  6055.  divs #3,d1
  6056.  moveq #0,d3
  6057.  
  6058.  move.w d1,(a1)+
  6059.  ext.l d2
  6060.  asl.l #7,d2
  6061.  add.l xwobble,d2
  6062.  move.l d2,(a1)+
  6063.  sub.l xwobble,d2
  6064.  
  6065.  add.w #64,a4
  6066.  dbra d7,.objpointrotlop
  6067.  
  6068.  rts
  6069.  
  6070. .itaux:
  6071.  add.w #64,a4
  6072.  bra .objpointrotlop
  6073.  
  6074. .noworkout:
  6075.   move.l #0,(a1)+
  6076.   move.l #0,(a1)+
  6077.   add.w #64,a4
  6078.   dbra d7,.objpointrotlop
  6079.   rts
  6080.  
  6081. LightDraw:
  6082.  
  6083.  move.w (a0)+,d0
  6084.  move.w (a0)+,d1
  6085.  move.l #Rotated,a1
  6086.  move.w 6(a1,d0.w*8),d2
  6087.  ble.s oneendbehind
  6088.  move.w 6(a1,d1.w*8),d3
  6089.  bgt.s bothendsinfront
  6090.  
  6091. oneendbehind:
  6092.  rts
  6093. bothendsinfront:
  6094.  
  6095.  move.l #OnScreen,a2
  6096.  move.w (a2,d0.w*2),d0
  6097.  bge.s okleftend
  6098.  moveq #0,d0
  6099. okleftend:
  6100.  move.w (a2,d1.w*2),d1
  6101.  bgt.s somevis
  6102.  rts
  6103. somevis:
  6104.  cmp.w RIGHTX,d0
  6105.  blt.s somevis2
  6106.  rts
  6107. somevis2:
  6108.  cmp.w RIGHTX,d1
  6109.  blt.s okrightend
  6110.  move.w RIGHTX,d1
  6111.  subq #1,d1
  6112. okrightend:
  6113.  
  6114.  sub.w d0,d1
  6115.  blt.s wrongbloodywayround
  6116.  move.l #brightentab,a4
  6117.  move.l #objintocop,a1
  6118.  lea (a1,d0.w*2),a1
  6119.  
  6120.  move.l frompt,a3
  6121.  move.w #104*4,d6
  6122.  move.w #79,d2
  6123. lacross:
  6124.  move.w d2,d3
  6125.  move.l a3,a2
  6126.  adda.w (a1)+,a2
  6127. ldown:
  6128.  add.w d6,a2
  6129.  move.w (a2),d7
  6130.  move.w (a4,d7.w*2),(a2)
  6131.  dbra d3,ldown
  6132.  dbra d1,lacross
  6133.  
  6134. wrongbloodywayround:
  6135.  
  6136.  rts
  6137.  
  6138. FaceToPlace: dc.w 0
  6139.  
  6140. Cheese:
  6141.  dc.w 4,15
  6142.  
  6143. FacesList:
  6144.  dc.w 0,4*4
  6145.  dc.w 1,2*4
  6146.  dc.w 0,2*4
  6147.  dc.w 2,2*4
  6148.  dc.w 0,2*4
  6149.  dc.w 1,3*4
  6150.  dc.w 0,2*4
  6151.  dc.w 2,3*4
  6152.  dc.w 0,5*4
  6153.  dc.w 1,2*4
  6154.  dc.w 0,2*4
  6155.  dc.w 2,2*4
  6156.  dc.w 0,2*4
  6157.  dc.w 1,2*4
  6158.  dc.w 0,2*4
  6159.  dc.w 2,3*4
  6160.  dc.w 0,1*4
  6161.  dc.w 1,3*4
  6162.  dc.w 0,1*4
  6163.  dc.w 2,3*4
  6164.  dc.w 0,1*4
  6165.  
  6166. EndOfFacesList:
  6167.  
  6168. FacesPtr:
  6169.  dc.l FacesList
  6170. FacesCounter:
  6171.  dc.w 0
  6172. Expression:
  6173.  dc.w 0
  6174.  
  6175.  
  6176. Energy:
  6177.  dc.w 191
  6178. OldEnergy:
  6179.  dc.w 191
  6180. Ammo: dc.w 63
  6181. OldAmmo: dc.w 63
  6182.  
  6183. FullEnergy:
  6184. ; move.w #127,Energy
  6185. ; move.w #127,OldEnergy
  6186. ; move.l #health,a0
  6187. ; move.l #borders,a1
  6188. ; add.l #25*8*2+6,a1
  6189. ; lea 2592(a1),a2
  6190. ; move.w #127,d0
  6191. ;PutInFull:
  6192. ; move.b (a0)+,(a1)
  6193. ; move.b (a0)+,8(a1)
  6194. ; add.w #16,a1
  6195. ; move.b (a0)+,(a2)
  6196. ; move.b (a0)+,8(a2)
  6197. ; add.w #16,a2
  6198. ; dbra d0,PutInFull
  6199.  
  6200.  rts
  6201.  
  6202. ;EnergyBar:
  6203.  
  6204.  move.w Energy,d0
  6205.  bgt.s .noeneg
  6206.  move.w #0,d0
  6207. .noeneg:
  6208.  move.w d0,Energy
  6209.  
  6210.  cmp.w OldEnergy,d0
  6211.  bne.s gottochange
  6212.  
  6213. NoChange
  6214.  rts
  6215.  
  6216. gottochange:
  6217.   
  6218.  blt LessEnergy
  6219.  cmp.w #127,Energy
  6220.  blt.s NotMax
  6221.  move.w #127,Energy
  6222. NotMax:
  6223.  
  6224.  move.w Energy,d0
  6225.  move.w OldEnergy,d2
  6226.  sub.w d0,d2
  6227.  beq.s NoChange    
  6228.  neg.w d2
  6229.  
  6230.  move.w #127,d3
  6231.  sub.w d0,d3
  6232.  
  6233.  move.l #health,a0
  6234.  lea (a0,d3.w*4),a0
  6235. ; move.l #borders+25*16+6,a1
  6236.  lsl.w #4,d3
  6237.  add.w d3,a1
  6238.  lea 2592(a1),a2
  6239.  
  6240. EnergyRise:
  6241.  move.b (a0)+,(a1)
  6242.  move.b (a0)+,8(a1)
  6243.  add.w #16,a1
  6244.  move.b (a0)+,(a2)
  6245.  move.b (a0)+,8(a2)
  6246.  add.w #16,a2
  6247.  subq #1,d2
  6248.  bgt.s EnergyRise
  6249.  
  6250.  move.w Energy,OldEnergy
  6251.  
  6252.  rts 
  6253.  
  6254. LessEnergy: 
  6255.  move.w OldEnergy,d2
  6256.  sub.w d0,d2
  6257.  
  6258.  move.w #127,d3
  6259.  sub.w OldEnergy,d3
  6260.  
  6261. ; move.l #borders+25*16+6,a1
  6262.  asl.w #4,d3
  6263.  add.w d3,a1
  6264.  lea 2592(a1),a2
  6265.  
  6266. EnergyDrain:
  6267.  move.b #0,(a1)
  6268.  move.b #0,8(a1)
  6269.  move.b #0,(a2)
  6270.  move.b #0,8(a2)
  6271.  add.w #16,a1
  6272.  add.w #16,a2
  6273.  subq #1,d2
  6274.  bgt.s EnergyDrain
  6275.  
  6276.  move.w Energy,OldEnergy
  6277.  
  6278.  rts 
  6279.  
  6280. firstdigit: dc.b 0
  6281. secdigit: dc.b 0
  6282. thirddigit: dc.b 0
  6283.  
  6284.  even
  6285.  
  6286. gunny: dc.w 0
  6287.  
  6288. AmmoBar:
  6289.  
  6290. * Do guns first.
  6291.  
  6292.  move.l #borderchars,a4
  6293.  move.b p1_gunselected,d0 
  6294.  move.l #PLAYERONEGUNS,a5
  6295.  cmp.b #'s',mors
  6296.  bne.s .notplr2
  6297.  move.l #PLAYERTWOGUNS,a5
  6298.  move.b p2_gunselected,d0
  6299. .notplr2:
  6300.  
  6301.  move.b d0,gunny
  6302.  
  6303.  move.w #9,d2
  6304.  moveq #0,d0
  6305. putingunnums:
  6306.  move.w #4,d1
  6307.  move.l a4,a0
  6308.  cmp.b gunny,d0
  6309.  bne.s .notsel
  6310.  add.l #5*10*8*2,a0
  6311.  addq #2,a5
  6312.  bra.s .donesel
  6313. .notsel:
  6314.  tst.w (a5)+
  6315.  beq.s .donesel
  6316.  add.l #5*10*8,a0
  6317. .donesel:
  6318.  move.l SCRNDRAWPT,a1
  6319.  add.w d0,a1
  6320.  add.l #3+(8*40),a1
  6321.  bsr DRAWDIGIT
  6322.  addq #1,d0
  6323.  dbra d2,putingunnums
  6324.  
  6325.  move.w Ammo,d0
  6326.  ext.l d0
  6327.  divs #10,d0
  6328.  swap d0
  6329.  move.b d0,thirddigit
  6330.  swap d0
  6331.  ext.l d0
  6332.  divs #10,d0
  6333.  move.b d0,firstdigit
  6334.  swap d0
  6335.  move.b d0,secdigit
  6336.  
  6337.  move.l #borderchars+15*8*10,a0
  6338.  cmp.w #10,Ammo
  6339.  blt.s .notsmallamo
  6340.  add.l #7*8*10,a0
  6341. .notsmallamo:
  6342.  
  6343.  move.l SCRNDRAWPT,a1
  6344.  add.l #20+6*40,a1
  6345.  move.b firstdigit,d0
  6346.  move.w #6,d1
  6347.  bsr DRAWDIGIT
  6348.  
  6349.  move.l SCRNDRAWPT,a1
  6350.  add.l #21+6*40,a1
  6351.  move.b secdigit,d0
  6352.  move.w #6,d1
  6353.  bsr DRAWDIGIT
  6354.  
  6355.  move.l SCRNDRAWPT,a1
  6356.  add.l #22+6*40,a1
  6357.  move.b thirddigit,d0
  6358.  move.w #6,d1
  6359.  bsr DRAWDIGIT
  6360.  
  6361.  rts
  6362.  
  6363. EnergyBar:
  6364.  move.w Energy,d0
  6365.  bge.s .okpo
  6366.  moveq #0,d0 
  6367. .okpo:
  6368.  
  6369.  ext.l d0
  6370.  divs #10,d0
  6371.  swap d0
  6372.  move.b d0,thirddigit
  6373.  swap d0
  6374.  ext.l d0
  6375.  divs #10,d0
  6376.  move.b d0,firstdigit
  6377.  swap d0
  6378.  move.b d0,secdigit
  6379.  
  6380.  move.l #borderchars+15*8*10,a0
  6381.  cmp.w #10,Energy
  6382.  blt.s .notsmallamo
  6383.  add.l #7*8*10,a0
  6384. .notsmallamo:
  6385.  
  6386.  move.l SCRNDRAWPT,a1
  6387.  add.l #34+6*40,a1
  6388.  move.b firstdigit,d0
  6389.  move.w #6,d1
  6390.  bsr DRAWDIGIT
  6391.  
  6392.  move.l SCRNDRAWPT,a1
  6393.  add.l #35+6*40,a1
  6394.  move.b secdigit,d0
  6395.  move.w #6,d1
  6396.  bsr DRAWDIGIT
  6397.  
  6398.  move.l SCRNDRAWPT,a1
  6399.  add.l #36+6*40,a1
  6400.  move.b thirddigit,d0
  6401.  move.w #6,d1
  6402.  bsr DRAWDIGIT
  6403.  
  6404. ; move.l SCRNSHOWPT,a1
  6405. ; add.l #34+238*40,a1
  6406. ; move.b firstdigit,d0
  6407. ; move.w #6,d1
  6408. ; bsr DRAWDIGIT
  6409.  
  6410. ; move.l SCRNSHOWPT,a1
  6411. ; add.l #35+238*40,a1
  6412. ; move.b secdigit,d0
  6413. ; move.w #6,d1
  6414. ; bsr DRAWDIGIT
  6415.  
  6416. ; move.l SCRNSHOWPT,a1
  6417. ; add.l #36+238*40,a1
  6418. ; move.b thirddigit,d0
  6419. ; move.w #6,d1
  6420. ; bsr DRAWDIGIT
  6421.  
  6422.  
  6423.  rts
  6424.  
  6425.  
  6426. DRAWDIGIT:
  6427.  ext.w d0
  6428.  lea (a0,d0.w),a2
  6429. charlines:
  6430.  lea 16*40*3(a1),a3 
  6431.  move.b (a2),(a1)
  6432.  move.b 10(a2),16*40(a1)
  6433.  move.b 20(a2),16*40*2(a1)
  6434.  move.b 30(a2),(a3)
  6435.  move.b 40(a2),16*40(a3)
  6436.  move.b 50(a2),16*40*2(a3)
  6437.  lea 16*40*3(a3),a3
  6438.  move.b 60(a2),(a3)
  6439.  move.b 70(a2),16*40(a3)
  6440.  
  6441.  add.w #10*8,a2
  6442.  add.w #40,a1
  6443.  dbra d1,charlines
  6444.  
  6445.  rts
  6446.  
  6447. borderchars: incbin "ab3:includes/bordercharsRAW"
  6448.  
  6449. NARRATOR:
  6450.  
  6451. ; sub.w #1,NARRTIME
  6452. ; bge .NOCHARYET
  6453. ; move.w #3,NARRTIME
  6454.  
  6455.  move.l #SCROLLSCRN,d1
  6456.  move.w d1,scroll
  6457.  swap d1
  6458.  move.w d1,scrolh
  6459.  
  6460.  move.w SCROLLTIMER,d0
  6461.  subq #1,d0
  6462.  move.w d0,SCROLLTIMER
  6463.  cmp.w #40,d0
  6464.  bge .NOCHARYET
  6465.  tst.w d0
  6466.  bge.s .okcha
  6467.  
  6468.  move.w #150,SCROLLTIMER
  6469.  bra .NOCHARYET
  6470.  
  6471. .okcha:
  6472.  
  6473.  move.l #SCROLLSCRN,a0
  6474.  add.w SCROLLXPOS,a0
  6475.  
  6476.  moveq #1,d7
  6477. .doachar: 
  6478.  
  6479.  move.l SCROLLPOINTER,a1
  6480.  moveq #0,d1
  6481.  move.b (a1)+,d1    ; character
  6482.  move.l a1,d2
  6483.  cmp.l ENDSCROLL,d2
  6484.  blt.s .notrestartscroll
  6485.  move.l #BLANKSCROLL,a1
  6486.  move.l #BLANKSCROLL+80,ENDSCROLL
  6487. .notrestartscroll
  6488.  move.l a1,SCROLLPOINTER
  6489.  
  6490.  move.l #SCROLLCHARS,a1
  6491.  asl.w #3,d1
  6492.  add.w d1,a1
  6493.  
  6494.  move.b (a1)+,(a0)
  6495.  move.b (a1)+,80(a0)
  6496.  move.b (a1)+,80*2(a0)
  6497.  move.b (a1)+,80*3(a0)
  6498.  move.b (a1)+,80*4(a0)
  6499.  move.b (a1)+,80*5(a0)
  6500.  move.b (a1)+,80*6(a0)
  6501.  move.b (a1)+,80*7(a0)
  6502.  
  6503.  addq #1,a0
  6504.  dbra d7,.doachar
  6505.  
  6506.  move.w SCROLLXPOS,d0
  6507.  addq #2,d0
  6508.  move.w d0,SCROLLXPOS
  6509.  cmp.w #80,d0
  6510.  blt .NOCHARYET
  6511.  move.w #0,SCROLLXPOS
  6512.  
  6513. .NOCHARYET:
  6514.  rts
  6515.  
  6516. ; cmp.w OldAmmo,d0
  6517. ; bne.s .gottochange
  6518.  
  6519. NARRTIME: dc.w 5
  6520.  
  6521. SCROLLCHARS: incbin "ab3:includes/scrollfont"
  6522.  
  6523. .NoChange
  6524.  rts
  6525.  
  6526. .gottochange:
  6527.   
  6528.  blt LessAmmo
  6529.  cmp.w #63,Ammo
  6530.  blt.s .NotMax
  6531.  move.w #63,Ammo
  6532. .NotMax:
  6533.  
  6534.  move.w Ammo,d0
  6535.  move.w OldAmmo,d2
  6536.  sub.w d0,d2
  6537.  beq.s .NoChange
  6538.  neg.w d2
  6539.  
  6540.  move.w #63,d3
  6541.  sub.w d0,d3
  6542.  
  6543.  move.l #Ammunition,a0
  6544.  lea (a0,d3.w*8),a0
  6545. ; move.l #borders+5184+25*16+1,a1
  6546.  lsl.w #5,d3
  6547.  add.w d3,a1
  6548.  lea 2592(a1),a2
  6549.  
  6550. AmmoRise:
  6551.  move.b (a0)+,(a1)
  6552.  move.b (a0)+,8(a1)
  6553.  add.w #16,a1
  6554.  move.b (a0)+,(a2)
  6555.  move.b (a0)+,8(a2)
  6556.  add.w #16,a2
  6557.  move.b (a0)+,(a1)
  6558.  move.b (a0)+,8(a1)
  6559.  add.w #16,a1
  6560.  move.b (a0)+,(a2)
  6561.  move.b (a0)+,8(a2)
  6562.  add.w #16,a2
  6563.  subq #1,d2
  6564.  bgt.s AmmoRise
  6565.  
  6566.  move.w Ammo,OldAmmo
  6567.  
  6568.  rts 
  6569.  
  6570.  
  6571. LessAmmo: 
  6572.  move.w OldAmmo,d2
  6573.  sub.w d0,d2
  6574.  
  6575.  move.w #63,d3
  6576.  sub.w OldAmmo,d3
  6577.  
  6578. ; move.l #borders++5184+25*16+1,a1
  6579.  asl.w #5,d3
  6580.  add.w d3,a1
  6581.  lea 2592(a1),a2
  6582.  
  6583. AmmoDrain:
  6584.  move.b #0,(a1)
  6585.  move.b #0,8(a1)
  6586.  move.b #0,(a2)
  6587.  move.b #0,8(a2)
  6588.  add.w #16,a1
  6589.  add.w #16,a2
  6590.  move.b #0,(a1)
  6591.  move.b #0,8(a1)
  6592.  move.b #0,(a2)
  6593.  move.b #0,8(a2)
  6594.  add.w #16,a1
  6595.  add.w #16,a2
  6596.  subq #1,d2
  6597.  bgt.s AmmoDrain
  6598.  
  6599.  move.w Ammo,OldAmmo
  6600.  
  6601.  rts 
  6602.  
  6603. nulop:
  6604.  move.w #$0010,$dff000+intreq
  6605.  rte
  6606.  
  6607. doanything: dc.w 0
  6608.  
  6609. end:
  6610. ;     _break #0
  6611.  
  6612.  
  6613.  move.l #$dff000,a6
  6614.  move.w #$f,$dff000+dmacon
  6615. waitfortop22:
  6616.  btst.b #0,intreqrl(a6)
  6617.  beq waitfortop22
  6618. waitfortop222:
  6619.  btst.b #0,intreqrl(a6)
  6620.  beq waitfortop222
  6621.  
  6622.  clr.b dosounds
  6623.  clr.b doanything
  6624.  
  6625.  move.w PLAYERONEHEALTH,Energy
  6626.  cmp.b #'s',mors
  6627.  bne.s .notsl
  6628.  move.w PLAYERTWOHEALTH,Energy
  6629. .notsl:
  6630.  
  6631.  move.l drawpt,d0
  6632.  move.l olddrawpt,drawpt
  6633.  move.l d0,olddrawpt
  6634.  
  6635. ; cmp.b #'b',Prefsfile+3
  6636. ; bne.s .noback
  6637. ; jsr mt_end
  6638. ;.noback
  6639.  
  6640.  tst.w Energy
  6641.  bgt.s wevewon
  6642.  move.w #0,Energy
  6643.  bsr EnergyBar
  6644.  
  6645.  move.l #gameover,mt_data
  6646.  st UseAllChannels
  6647.  clr.b reachedend
  6648.  jsr mt_init
  6649. playgameover:
  6650.  move.l #$dff000,a6
  6651. waitfortop2:
  6652.  
  6653.     
  6654.  btst.b #0,intreqrl(a6)
  6655.  beq waitfortop2
  6656.  move.w #$1,intreq(a6)
  6657.  
  6658.     
  6659.  jsr mt_music
  6660.  
  6661.  
  6662.     
  6663.  tst.b reachedend
  6664.  beq.s playgameover
  6665.  
  6666.  bra wevelost
  6667.  
  6668.  
  6669. wevewon:
  6670.  
  6671.  
  6672.  bsr EnergyBar
  6673.  
  6674.  cmp.b #'n',mors
  6675.  bne.s .nonextlev
  6676.  add.w #1,MAXLEVEL
  6677.  st FINISHEDLEVEL
  6678. .nonextlev:
  6679.  
  6680.  move.l #welldone,mt_data
  6681.  st UseAllChannels
  6682.  clr.b reachedend
  6683.  
  6684.  jsr mt_init
  6685. playwelldone:
  6686.  move.l #$dff000,a6
  6687. waitfortop3:
  6688.  btst.b #0,intreqrl(a6)
  6689.  beq waitfortop3
  6690.  move.w #$1,intreq(a6)
  6691.  
  6692.  jsr mt_music
  6693.  
  6694.  tst.b reachedend
  6695.  beq.s playwelldone
  6696.  
  6697. wevelost:
  6698.  
  6699.  PROTICHECK a0
  6700.  
  6701.  jmp closeeverything 
  6702.  
  6703. endnomusic
  6704.  clr.b doanything
  6705.  
  6706. ; cmp.b #'b',Prefsfile+3
  6707. ; bne.s .noback
  6708. ; jsr mt_end
  6709. ;.noback
  6710. *******************************
  6711. ; cmp.b #'n',mors
  6712. ; bne.s .nonextlev
  6713. ; cmp.w #15,MAXLEVEL
  6714. ; bge.s .nonextlev
  6715. ; add.w #1,MAXLEVEL
  6716. ; st FINISHEDLEVEL
  6717. ;.nonextlev:
  6718. ******************************
  6719.  
  6720.  jmp closeeverything
  6721.  
  6722. do32:
  6723.  move.w #31,d7
  6724.  move.w #$180,d1
  6725. across:
  6726.  move.w d1,(a1)+
  6727.  move.w d1,(a3)+
  6728.  move.w #0,(a1)+ 
  6729.  move.w #0,(a3)+
  6730.  add.w #2,d1
  6731.  dbra d7,across
  6732.  rts
  6733.  
  6734. string:
  6735.     dc.b    'credits',0
  6736.  
  6737. ENDGAMESCROLL:
  6738.  
  6739.     move.l    4.w,a6
  6740.     move.l    #string,d1
  6741.     moveq    #0,d2
  6742.     moveq    #0,d3
  6743.     jsr    _LVOExecute(a6)
  6744.  
  6745. ; include "endscroll.s"
  6746.  
  6747. ***********************************
  6748.  include "ab3:CHEESESAUCE/CD32JOY"
  6749.  
  6750.  
  6751.  
  6752. *************************************
  6753. * Set left and right clip values
  6754. *************************************
  6755.  
  6756.  
  6757.  
  6758. NEWsetlclip:
  6759.  move.l #OnScreen,a1
  6760.  move.l #Rotated,a2
  6761.  move.l CONNECT_TABLE,a3
  6762.  move.l Points,a4
  6763.  
  6764.  move.w (a0),d0
  6765.  bge.s .notignoreleft
  6766.  
  6767. ; move.l #0,(a6)
  6768.  
  6769.  bra .leftnotoktoclip
  6770. .notignoreleft:
  6771.  
  6772.  move.w 6(a2,d0*8),d3    ; left z val
  6773.  bgt.s .leftclipinfront
  6774.  addq #2,a0
  6775.  rts
  6776.  
  6777.  tst.w 6(a2,d0*8)
  6778.  bgt.s .leftnotoktoclip
  6779. .ignoreboth:
  6780. ; move.l #0,(a6)
  6781. ; move.l #96*65536,4(a6)
  6782.  move.w #0,leftclip
  6783.  move.w RIGHTX,rightclip
  6784.  addq #8,a6
  6785.  addq #2,a0
  6786.  rts
  6787.  
  6788. .leftclipinfront:
  6789.  move.w (a1,d0*2),d1    ; left x on screen
  6790.  move.w (a0),d2
  6791.  move.w 2(a3,d2.w*4),d2
  6792.  move.w (a1,d2.w*2),d2
  6793.  cmp.w d1,d2
  6794.  bgt.s .leftnotoktoclip
  6795.  
  6796.  
  6797. *************************************
  6798.  
  6799.  move.w 2(a3,d0.w*4),d6
  6800.  
  6801.  move.w (a4,d0.w*4),d2
  6802.  move.w 2(a4,d0.w*4),d3
  6803.  move.w (a4,d6.w*4),d4
  6804.  move.w 2(a4,d6.w*4),d5
  6805.  
  6806.  sub.w d2,d4    ;dx
  6807.  sub.w d3,d5    ;dz
  6808.  move.w xoff,d0
  6809.  move.w zoff,d6
  6810.  
  6811.  sub.w d2,d0
  6812.  sub.w d3,d6
  6813.  
  6814.  muls d0,d4
  6815.  muls d6,d5
  6816.  add.l d4,d5
  6817.  bge.s .leftnotoktoclip
  6818.  
  6819. *************************************
  6820.  
  6821.  
  6822.  
  6823. ; move.w d1,(a6)
  6824. ; move.w d3,2(a6)
  6825.  cmp.w leftclip,d1
  6826.  ble.s .leftnotoktoclip
  6827.  move.w d1,leftclip
  6828. .leftnotoktoclip:
  6829.  
  6830.  addq #2,a0
  6831.  
  6832.  rts
  6833.  
  6834. NEWsetrclip
  6835.  move.l #OnScreen,a1
  6836.  move.l #Rotated,a2
  6837.  move.l CONNECT_TABLE,a3
  6838.  move.w (a0),d0
  6839.  bge.s .notignoreright
  6840. ; move.w #96,4(a6)
  6841. ; move.w #0,6(a6)
  6842.  move.w #0,d4
  6843.  bra .rightnotoktoclip
  6844. .notignoreright:
  6845.  move.w 6(a2,d0*8),d4    ; right z val
  6846.  bgt.s .rightclipinfront
  6847. ; move.w #96,4(a6)
  6848. ; move.w #0,6(a6)
  6849.  bra.s .rightnotoktoclip
  6850.  
  6851. .rightclipinfront:
  6852.  move.w (a1,d0*2),d1    ; right x on screen
  6853.  move.w (a0),d2
  6854.  move.w (a3,d2.w*4),d2
  6855.  move.w (a1,d2.w*2),d2
  6856.  cmp.w d1,d2
  6857.  blt.s .rightnotoktoclip
  6858. ; move.w d1,4(a6)
  6859. ; move.w d4,6(a6)
  6860.  
  6861.  
  6862. *************************************
  6863.  
  6864.  move.w (a3,d0.w*4),d6
  6865.  
  6866.  move.w (a4,d0.w*4),d2
  6867.  move.w 2(a4,d0.w*4),d3
  6868.  move.w (a4,d6.w*4),d4
  6869.  move.w 2(a4,d6.w*4),d5
  6870.  
  6871.  sub.w d2,d4    ;dx
  6872.  sub.w d3,d5    ;dz
  6873.  move.w xoff,d0
  6874.  move.w zoff,d6
  6875.  
  6876.  sub.w d2,d0
  6877.  sub.w d3,d6
  6878.  
  6879.  muls d0,d4
  6880.  muls d6,d5
  6881.  add.l d4,d5
  6882.  ble.s .rightnotoktoclip
  6883.  
  6884. *************************************
  6885.  
  6886.  
  6887.  
  6888.  cmp.w rightclip,d1
  6889.  bge.s .rightnotoktoclip
  6890.  addq #1,d1
  6891.  move.w d1,rightclip
  6892. .rightnotoktoclip:
  6893.  addq #8,a6
  6894.  addq #2,a0
  6895.  rts
  6896.  
  6897. FIRSTsetlrclip:
  6898.  move.l #OnScreen,a1
  6899.  move.l #Rotated,a2
  6900.  
  6901.  move.w (a0)+,d0
  6902.  bge.s .notignoreleft
  6903.  bra .leftnotoktoclip
  6904. .notignoreleft:
  6905.  
  6906.  move.w 6(a2,d0*8),d3    ; left z val
  6907.  bgt.s .leftclipinfront
  6908.  
  6909.  move.w (a0),d0
  6910.  blt.s .ignoreboth
  6911.  tst.w 6(a2,d0*8)
  6912.  bgt.s .leftnotoktoclip
  6913. .ignoreboth
  6914.  move.w RIGHTX,rightclip
  6915.  move.w #0,leftclip
  6916.  addq #2,a0
  6917.  rts
  6918.  
  6919. .leftclipinfront:
  6920.  move.w (a1,d0*2),d1    ; left x on screen
  6921.  cmp.w leftclip,d1
  6922.  ble.s .leftnotoktoclip
  6923.  move.w d1,leftclip
  6924. .leftnotoktoclip:
  6925.  
  6926.  move.w (a0)+,d0
  6927.  bge.s .notignoreright
  6928.  move.w #0,d4
  6929.  bra .rightnotoktoclip
  6930. .notignoreright:
  6931.  move.w 6(a2,d0*8),d4    ; right z val
  6932.  ble.s .rightnotoktoclip
  6933.  
  6934. .rightclipinfront:
  6935.  move.w (a1,d0*2),d1    ; right x on screen
  6936.  addq #1,d1
  6937.  cmp.w rightclip,d1
  6938.  bge.s .rightnotoktoclip
  6939.  move.w d1,rightclip
  6940. .rightnotoktoclip:
  6941.  
  6942. ; move.w leftclip,d0
  6943. ; move.w rightclip,d1
  6944. ; cmp.w d0,d1
  6945. ; bge.s .noswap
  6946. ; move.w #192,rightclip
  6947. ; move.w #0,leftclip
  6948. ;.noswap:
  6949.  
  6950.  rts
  6951.  
  6952.  
  6953. leftclip2: dc.w 0
  6954. rightclip2: dc.w 0
  6955. ZoneBright: dc.w 0
  6956.  
  6957. npolys: dc.w 0
  6958.  
  6959. PLR1_fire: dc.b 0
  6960. PLR2_fire: dc.b 0
  6961.  
  6962. *****************************************************
  6963.  
  6964.  
  6965. pastdata:
  6966. ***********************************
  6967. * This routine animates brightnesses.
  6968.  
  6969.  
  6970. liftpt: dc.l liftanimtab
  6971.  
  6972. brightpt:
  6973.  dc.l brightanimtab
  6974.  
  6975.  
  6976. liftanim:
  6977.  rts
  6978.  
  6979. ******************************
  6980.  include "ab3:CHEESESAUCE/objectMove"
  6981.  include "ab3:CHEESESAUCE/newAnims"
  6982.  include "ab3:CHEESESAUCE/airoutine.s"
  6983. ******************************
  6984. startpass:
  6985. ; include "ab3:source_4000/password_reloc.s"
  6986. endpass:
  6987.  
  6988. rotanimpt: dc.w 0
  6989. xradd: dc.w 5
  6990. yradd: dc.w 8
  6991. xrpos: dc.w 320
  6992. yrpos: dc.w 320
  6993.  
  6994. rotanim:
  6995.  rts
  6996.  
  6997. option:
  6998.  dc.l 0,0
  6999.  
  7000. ********** WALL STUFF *******************************
  7001.  
  7002.  include "AB3:CHEESESAUCE/hireswall.s"
  7003.  include "AB3:CHEESESAUCE/hiresgourwall.s"
  7004.  
  7005. *****************************************************
  7006.  
  7007. ******************************************
  7008. * floor polygon
  7009.  
  7010. numsidestd: dc.w 0
  7011. bottomline: dc.w 0
  7012.  
  7013. checkforwater:
  7014.  tst.b usewater
  7015.  beq.s .notwater
  7016.  
  7017.  move.l Roompt,a1
  7018.  move.w (a1),d7
  7019.  cmp.w currzone,d7
  7020.  bne.s .notwater
  7021.  
  7022.  move.b #$f,fillscrnwater
  7023.  
  7024. .notwater:
  7025.  move.w (a0)+,d6    ; sides-1
  7026.  add.w d6,d6
  7027.  add.w d6,a0
  7028.  add.w #4+6,a0
  7029.  rts
  7030.  
  7031.  rts
  7032.  
  7033. ;NewCornerBuff:
  7034. ; ds.l 100
  7035. CLRNOFLOOR: dc.w 0
  7036.  
  7037. itsafloordraw:
  7038.  
  7039. * If D0 =1 then its a floor otherwise (=2) it's
  7040. * a roof.
  7041.  
  7042.  move.w #0,above
  7043.  move.w (a0)+,d6    ; ypos of poly
  7044.  
  7045.  tst.b usewater
  7046.  beq.s .oknon
  7047.  tst.b DOANYWATER
  7048.  beq dontdrawreturn
  7049. .oknon
  7050.  
  7051.  move.w d6,d7
  7052.  ext.l d7
  7053.  asl.l #6,d7
  7054.  cmp.l TOPOFROOM,d7
  7055.  blt checkforwater
  7056.  cmp.l BOTOFROOM,d7
  7057.  bgt.s dontdrawreturn
  7058.  
  7059.  move.w leftclip,d7
  7060.  cmp.w rightclip,d7
  7061.  bge.s dontdrawreturn
  7062.  
  7063.  sub.w flooryoff,d6
  7064.  bgt.s below
  7065.  blt.s aboveplayer
  7066.  
  7067.  tst.b usewater
  7068.  beq.s .notwater
  7069.  
  7070.  move.l Roompt,a1
  7071.  move.w (a1),d7
  7072.  cmp.w currzone,d7
  7073.  
  7074.  bne.s .notwater
  7075.  
  7076.  st fillscrnwater
  7077.  
  7078. .notwater:
  7079.  
  7080.  
  7081. dontdrawreturn:
  7082.  move.w (a0)+,d6    ; sides-1
  7083.  add.w d6,d6
  7084.  add.w d6,a0
  7085.  add.w #4+6,a0
  7086.  rts
  7087. aboveplayer:
  7088.  
  7089.  tst.b usewater
  7090.  beq.s .notwater
  7091.  
  7092.  move.l Roompt,a1
  7093.  move.w (a1),d7
  7094.  cmp.w currzone,d7
  7095.  bne.s .notwater
  7096.  
  7097.  move.b #$f,fillscrnwater
  7098.  
  7099. .notwater:
  7100.  
  7101.  btst #1,d0
  7102.  beq.s dontdrawreturn
  7103.  move.w MIDDLEY,d7
  7104.  sub.w topclip,d7 
  7105.  ble.s dontdrawreturn
  7106.  move.w #1,d0
  7107.  move.w d0,above
  7108.  neg.w d6
  7109.  bra.s notbelow
  7110. below:
  7111.  move.w botclip,d7
  7112.  sub.w MIDDLEY,d7
  7113.  ble.s dontdrawreturn
  7114. notbelow:
  7115.  btst #0,d0
  7116.  beq.s dontdrawreturn
  7117.  move.w d6,distaddr
  7118.  muls #64,d6
  7119.  move.l d6,ypos
  7120.  ext.l d7
  7121.  divs.l d7,d6        ; zpos of bottom
  7122.             ; visible line
  7123.  
  7124.  beq dontdrawreturn
  7125.  
  7126.  cmp.l #32767,d6
  7127.  bgt dontdrawreturn
  7128.             
  7129.  move.w d6,minz
  7130.  move.w d7,bottomline
  7131.  
  7132. ; Go round each point finding out
  7133. ; if it should be visible or not.
  7134.  
  7135.  move.l a0,-(a7)
  7136.  
  7137.  move.w (a0)+,d7    ; number of sides
  7138.  move.l #Rotated,a1
  7139.  move.l #OnScreen,a2
  7140. ; move.l #NewCornerBuff,a3
  7141.  moveq #0,d4
  7142.  moveq #0,d5
  7143.  moveq #0,d6
  7144.  clr.b anyclipping
  7145.  
  7146. cornerprocessloop:
  7147.  
  7148.  move.w (a0)+,d0
  7149.  and.w #$fff,d0
  7150.  move.w 6(a1,d0.w*8),d1
  7151.  ble  .canttell
  7152.  
  7153.  move.w (a2,d0.w*2),d3
  7154.  cmp.w leftclip,d3
  7155.  bgt.s .nol
  7156.  st d4
  7157.  st anyclipping
  7158.  bra.s .nos
  7159. .nol:
  7160.  cmp.w rightclip,d3
  7161.  blt.s .nor
  7162.  st d6
  7163.  st anyclipping
  7164.  bra.s .nos
  7165. .nor:
  7166.  st d5
  7167. .nos:
  7168.  bra .cantell
  7169.  
  7170. .canttell:
  7171.  st d5
  7172.  st anyclipping
  7173.  
  7174. .cantell:
  7175.  
  7176.  
  7177.  dbra d7,cornerprocessloop
  7178.  
  7179.  
  7180.  move.l (a7)+,a0
  7181.  tst.b d5
  7182.  bne.s somefloortodraw
  7183.  eor.b d4,d6
  7184.  bne dontdrawreturn
  7185.  
  7186. somefloortodraw:
  7187.  
  7188.  tst.b gourfloor
  7189.  bne goursides
  7190.  
  7191.  move.w #300,top
  7192.  move.w #-1,bottom
  7193.  move.w #0,drawit
  7194.  move.l #Rotated,a1
  7195.  move.l #OnScreen,a2
  7196.  move.w (a0)+,d7    ; no of sides
  7197. sideloop:
  7198.  move.w minz,d6
  7199.  move.w (a0)+,d1
  7200.  move.w (a0),d3
  7201.  and.w #$fff,d1
  7202.  and.w #$fff,d3
  7203.  
  7204.  move.w 6(a1,d1*8),d4    ;first z
  7205.  cmp.w d6,d4
  7206.  bgt firstinfront
  7207.  move.w 6(a1,d3*8),d5    ; sec z
  7208.  cmp.w d6,d5
  7209.  ble bothbehind
  7210. ** line must be on left and partially behind.
  7211.  sub.w d5,d4
  7212.  move.l (a1,d1*8),d0
  7213.  sub.l (a1,d3*8),d0
  7214.  asr.l #7,d0
  7215.  sub.w d5,d6
  7216.  muls d6,d0    ; new x coord
  7217.  divs d4,d0
  7218.  ext.l d0
  7219.  asl.l #7,d0
  7220.  
  7221.  add.l (a1,d3*8),d0
  7222.  move.w minz,d4
  7223.  move.w (a2,d3*2),d2
  7224.  divs d4,d0
  7225.  add.w MIDDLEX,d0
  7226.  move.l ypos,d3
  7227.  divs d5,d3
  7228.  move.w bottomline,d1 
  7229.  bra lineclipped
  7230.  
  7231. firstinfront:
  7232.  move.w 6(a1,d3*8),d5    ; sec z
  7233.  cmp.w d6,d5
  7234.  bgt bothinfront
  7235. ** line must be on right and partially behind.
  7236.  sub.w d4,d5    ; dz
  7237.  move.l (a1,d3*8),d2
  7238.  sub.l (a1,d1*8),d2    ; dx
  7239.  sub.w d4,d6
  7240.  asr.l #7,d2
  7241.  muls d6,d2    ; new x coord
  7242.  divs d5,d2
  7243.  ext.l d2
  7244.  asl.l #7,d2
  7245.  add.l (a1,d1*8),d2
  7246.  move.w minz,d5
  7247.  move.w (a2,d1*2),d0
  7248.  divs d5,d2
  7249.  add.w MIDDLEX,d2
  7250.  move.l ypos,d1
  7251.  divs d4,d1
  7252.  move.w bottomline,d3 
  7253.  bra lineclipped
  7254.  
  7255. bothinfront:
  7256.  
  7257. * Also, usefully enough, both are on-screen
  7258. * so no bottom clipping is needed.
  7259.  
  7260.  move.w (a2,d1*2),d0    ; first x
  7261.  move.w (a2,d3*2),d2    ; second x
  7262.  move.l ypos,d1
  7263.  move.l d1,d3
  7264.  divs d4,d1        ; first y
  7265.  divs d5,d3        ; second y
  7266. lineclipped:
  7267.  move.l #rightsidetab,a3
  7268.  cmp.w d1,d3
  7269.  beq lineflat
  7270.  st drawit
  7271.  bgt lineonright
  7272.  move.l #leftsidetab,a3
  7273.  exg d1,d3
  7274.  exg d0,d2
  7275.  
  7276.  lea (a3,d1*2),a3
  7277.  
  7278.  cmp.w top(pc),d1
  7279.  bge.s .nonewtop
  7280.  move.w d1,top
  7281. .nonewtop:
  7282.  cmp.w bottom(pc),d3
  7283.  ble.s .nonewbot
  7284.  move.w d3,bottom
  7285. .nonewbot:
  7286.  
  7287.  sub.w d1,d3    ; dy
  7288.  sub.w d0,d2    ; dx
  7289.  
  7290.  blt .linegoingleft
  7291.  
  7292.  ext.l d2
  7293.  divs d3,d2
  7294.  move.w d2,d6
  7295.  swap d2
  7296.  
  7297. ; moveq #0,d6
  7298. ; sub.w d3,d2
  7299. ; blt.s .noco
  7300. ;.makeco
  7301. ; addq #1,d6
  7302. ; sub.w d3,d2
  7303. ; bge.s .makeco
  7304. ;.noco
  7305. ; add.w d3,d2
  7306.  
  7307.  move.w d3,d4
  7308.  move.w d3,d5
  7309.  subq #1,d5
  7310.  move.w d6,d1
  7311.  addq #1,d1
  7312.  
  7313. .pixlopright:
  7314.  move.w d0,(a3)+
  7315.  sub.w d2,d4
  7316.  bge.s .nobigstep
  7317.  add.w d1,d0
  7318.  add.w d3,d4
  7319.  dbra d5,.pixlopright
  7320.  bra lineflat
  7321. .nobigstep
  7322.  add.w d6,d0
  7323.  dbra d5,.pixlopright
  7324.  bra lineflat
  7325.  
  7326. .linegoingleft:
  7327.  
  7328.  neg.w d2
  7329.  
  7330.  ext.l d2
  7331.  divs d3,d2
  7332.  move.w d2,d6
  7333.  swap d2
  7334.  
  7335.  
  7336. ; moveq #0,d6
  7337. ; sub.w d3,d2
  7338. ; blt.s .nocol
  7339. ;.makecol
  7340. ; addq #1,d6
  7341. ; sub.w d3,d2
  7342. ; bge.s .makecol
  7343. ;.nocol
  7344. ; add.w d3,d2
  7345.  
  7346.  
  7347.  
  7348.  move.w d3,d4
  7349.  move.w d3,d5
  7350.  subq #1,d5
  7351.  
  7352.  move.w d6,d1
  7353.  addq #1,d1
  7354.  
  7355. .pixlopleft:
  7356.  sub.w d2,d4
  7357.  bge.s .nobigstepl
  7358.  sub.w d1,d0
  7359.  add.w d3,d4
  7360.  move.w d0,(a3)+
  7361.  dbra d5,.pixlopleft
  7362.  bra lineflat
  7363.  
  7364. .nobigstepl
  7365.  sub.w d6,d0
  7366.  move.w d0,(a3)+
  7367.  dbra d5,.pixlopleft
  7368.  bra lineflat
  7369.  
  7370. lineonright:
  7371.  
  7372.  lea (a3,d1*2),a3
  7373.  
  7374.  cmp.w top(pc),d1
  7375.  bge.s .nonewtop
  7376.  move.w d1,top
  7377. .nonewtop:
  7378.  cmp.w bottom(pc),d3
  7379.  ble.s .nonewbot
  7380.  move.w d3,bottom
  7381. .nonewbot:
  7382.  
  7383.  sub.w d1,d3    ; dy
  7384.  sub.w d0,d2    ; dx
  7385.  blt .linegoingleft
  7386. ; addq #1,d0
  7387.  ext.l d2
  7388.  divs d3,d2
  7389.  move.w d2,d6
  7390.  swap d2
  7391.  
  7392. ; moveq #0,d6
  7393. ; sub.w d3,d2
  7394. ; blt.s .noco
  7395. ;.makeco
  7396. ; addq #1,d6
  7397. ; sub.w d3,d2
  7398. ; bge.s .makeco
  7399. ;.noco
  7400. ; add.w d3,d2
  7401.  
  7402.  move.w d3,d4
  7403.  move.w d3,d5
  7404.  subq #1,d5
  7405.  move.w d6,d1
  7406.  addq #1,d1
  7407.  
  7408. .pixlopright:
  7409.  sub.w d2,d4
  7410.  bge.s .nobigstep
  7411.  add.w d1,d0
  7412.  add.w d3,d4
  7413.  move.w d0,(a3)+
  7414.  dbra d5,.pixlopright
  7415.  bra lineflat
  7416.  
  7417. .nobigstep
  7418.  add.w d6,d0
  7419.  move.w d0,(a3)+
  7420.  dbra d5,.pixlopright
  7421.  bra lineflat
  7422.  
  7423. .linegoingleft:
  7424. ; addq #1,d0
  7425.  neg.w d2
  7426.  
  7427.  ext.l d2
  7428.  divs d3,d2
  7429.  move.w d2,d6
  7430.  swap d2
  7431.  
  7432.  
  7433. ; moveq #0,d6
  7434. ; sub.w d3,d2
  7435. ; blt.s .nocol
  7436. ;.makecol
  7437. ; addq #1,d6
  7438. ; sub.w d3,d2
  7439. ; bge.s .makecol
  7440. ;.nocol
  7441. ; add.w d3,d2
  7442.  
  7443.  move.w d3,d4
  7444.  move.w d3,d5
  7445.  subq #1,d5
  7446.  move.w d6,d1
  7447.  addq #1,d1
  7448.  
  7449. .pixlopleft:
  7450.  move.w d0,(a3)+
  7451.  sub.w d2,d4
  7452.  bge.s .nobigstepl
  7453.  sub.w d1,d0
  7454.  add.w d3,d4
  7455.  dbra d5,.pixlopleft
  7456.  bra lineflat
  7457.  
  7458. .nobigstepl
  7459.  sub.w d6,d0
  7460.  dbra d5,.pixlopleft
  7461.  
  7462. lineflat:
  7463.  
  7464. bothbehind:
  7465.  dbra d7,sideloop
  7466.  bra pastsides
  7467.  
  7468. fbr: dc.w 0
  7469. sbr: dc.w 0
  7470. FloorPtBrights: dc.l 0
  7471.  
  7472. goursides:
  7473.  
  7474.  move.w #300,top
  7475.  move.w #-1,bottom
  7476.  move.w #0,drawit
  7477.  move.l #Rotated,a1
  7478.  move.l #OnScreen,a2
  7479.  move.w (a0)+,d7    ; no of sides
  7480. sideloopGOUR:
  7481.  move.w minz,d6
  7482.  move.w (a0)+,d1
  7483.  move.w (a0),d3
  7484.  
  7485.  move.w d1,d4
  7486.  move.w d3,d5
  7487.  and.w #$0fff,d1
  7488.  and.w #$0fff,d3
  7489.  
  7490.  rol.w #4,d4
  7491.  rol.w #4,d5
  7492.  and.w #$f,d4
  7493.  and.w #$f,d5
  7494.  
  7495.  move.l FloorPtBrights,a4
  7496.  move.w (a4,d4.w*8),d4
  7497.  bge.s .okpos1
  7498.  neg.w d4
  7499. .okpos1:
  7500.  sub.w #300,d4
  7501.  move.w d4,fbr
  7502.  move.w (a4,d5.w*8),d4
  7503.  bge.s .okpos2
  7504.  neg.w d4
  7505. .okpos2:
  7506.  sub.w #300,d4
  7507.  move.w d4,sbr
  7508.  
  7509.  move.w 6(a1,d1*8),d4    ;first z
  7510.  cmp.w d6,d4
  7511.  bgt firstinfrontGOUR
  7512.  move.w 6(a1,d3*8),d5    ; sec z
  7513.  cmp.w d6,d5
  7514.  ble bothbehindGOUR
  7515. ** line must be on left and partially behind.
  7516.  sub.w d5,d4
  7517.  
  7518.  move.w fbr,d0
  7519.  sub.w sbr,d0
  7520.  sub.w d5,d6
  7521.  muls d6,d0
  7522.  divs d4,d0
  7523.  add.w sbr,d0
  7524.  move.w d0,fbr
  7525.  
  7526.  move.l (a1,d1*8),d0
  7527.  sub.l (a1,d3*8),d0
  7528.  asr.l #7,d0
  7529.  muls d6,d0    ; new x coord
  7530.  divs d4,d0
  7531.  ext.l d0
  7532.  asl.l #7,d0
  7533.  
  7534.  add.l (a1,d3*8),d0
  7535.  move.w minz,d4
  7536.  move.w (a2,d3*2),d2
  7537.  divs d4,d0
  7538.  add.w MIDDLEX,d0
  7539.  move.l ypos,d3
  7540.  divs d5,d3
  7541.  
  7542.  move.w bottomline,d1 
  7543.  bra lineclippedGOUR
  7544.  
  7545. firstinfrontGOUR:
  7546.  move.w 6(a1,d3*8),d5    ; sec z
  7547.  cmp.w d6,d5
  7548.  bgt bothinfrontGOUR
  7549. ** line must be on right and partially behind.
  7550.  sub.w d4,d5    ; dz
  7551.  
  7552.  move.w sbr,d2
  7553.  sub.w fbr,d2
  7554.  sub.w d4,d6
  7555.  muls d6,d2
  7556.  divs d5,d2
  7557.  add.w fbr,d2
  7558.  move.w d2,sbr
  7559.  
  7560.  move.l (a1,d3*8),d2
  7561.  sub.l (a1,d1*8),d2    ; dx
  7562.  asr.l #7,d2
  7563.  muls d6,d2    ; new x coord
  7564.  divs d5,d2
  7565.  ext.l d2
  7566.  asl.l #7,d2
  7567.  add.l (a1,d1*8),d2
  7568.  move.w minz,d5
  7569.  move.w (a2,d1*2),d0
  7570.  divs d5,d2
  7571.  add.w MIDDLEX,d2
  7572.  move.l ypos,d1
  7573.  divs d4,d1
  7574.  move.w bottomline,d3 
  7575.  bra lineclippedGOUR
  7576.  
  7577. bothinfrontGOUR:
  7578.  
  7579. * Also, usefully enough, both are on-screen
  7580. * so no bottom clipping is needed.
  7581.  
  7582.  move.w (a2,d1*2),d0    ; first x
  7583.  move.w (a2,d3*2),d2    ; second x
  7584.  move.l ypos,d1
  7585.  move.l d1,d3
  7586.  divs d4,d1        ; first y
  7587.  divs d5,d3        ; second y
  7588. lineclippedGOUR:
  7589.  move.l #rightsidetab,a3
  7590.  cmp.w d1,d3
  7591.  bne linenotflatGOUR
  7592.  
  7593. ; move.w fbr,d4
  7594. ; move.w sbr,d5
  7595. ; cmp.w d0,d2
  7596. ; bgt.s .nsw
  7597. ; exg d4,d5
  7598. ;.nsw:
  7599.  
  7600. ; move.l #leftbrighttab,a3
  7601. ; move.w d4,(a3,d3.w)
  7602. ; move.l #rightbrighttab,a3
  7603. ; move.w d5,(a3,d3.w) 
  7604.  bra lineflatGOUR
  7605.  
  7606. linenotflatGOUR
  7607.  st drawit
  7608.  bgt lineonrightGOUR
  7609.  move.l #leftsidetab,a3
  7610.  exg d1,d3
  7611.  exg d0,d2
  7612.  
  7613.  lea (a3,d1*2),a3
  7614.  lea leftbrighttab-leftsidetab(a3),a4
  7615.  
  7616.  cmp.w top(pc),d1
  7617.  bge.s .nonewtop
  7618.  move.w d1,top
  7619. .nonewtop:
  7620.  cmp.w bottom(pc),d3
  7621.  ble.s .nonewbot
  7622.  move.w d3,bottom
  7623. .nonewbot:
  7624.  
  7625.  sub.w d1,d3    ; dy
  7626.  sub.w d0,d2    ; dx
  7627.  
  7628.  blt .linegoingleft
  7629.  
  7630.  ext.l d2
  7631.  divs d3,d2
  7632.  move.w d2,d6
  7633.  swap d2
  7634.  move.w d2,a5
  7635.  
  7636. ; moveq #0,d6
  7637. ; sub.w d3,d2
  7638. ; blt.s .noco
  7639. ;.makeco
  7640. ; addq #1,d6
  7641. ; sub.w d3,d2
  7642. ; bge.s .makeco
  7643. ;.noco
  7644. ; add.w d3,d2
  7645.  
  7646.  move.w d3,d4
  7647.  move.w d3,d5
  7648.  subq #1,d5
  7649.  move.w d6,d1
  7650.  addq #1,d1
  7651.  move.w d1,a6
  7652.  
  7653.  moveq #0,d1
  7654.  move.w sbr,d1
  7655.  move.w fbr,d2
  7656.  sub.w d1,d2
  7657.  ext.l d2
  7658.  asl.w #8,d2
  7659.  asl.w #2,d2
  7660.  divs d3,d2 
  7661.  ext.l d2
  7662.  asl.l #6,d2
  7663.  swap d1
  7664.  
  7665. .pixlopright:
  7666.  move.w d0,(a3)+
  7667.  swap d1
  7668.  move.w d1,(a4)+
  7669.  swap d1
  7670.  add.l d2,d1
  7671.  
  7672.  sub.w a5,d4
  7673.  bge.s .nobigstep
  7674.  add.w a6,d0
  7675.  add.w d3,d4
  7676.  dbra d5,.pixlopright
  7677.  bra lineflatGOUR
  7678. .nobigstep
  7679.  
  7680.  add.w d6,d0
  7681.  dbra d5,.pixlopright
  7682.  bra lineflatGOUR
  7683.  
  7684. .linegoingleft:
  7685.  
  7686.  neg.w d2
  7687.  
  7688.  ext.l d2
  7689.  divs d3,d2
  7690.  move.w d2,d6
  7691.  swap d2
  7692.  
  7693.  
  7694. ; moveq #0,d6
  7695. ; sub.w d3,d2
  7696. ; blt.s .nocol
  7697. ;.makecol
  7698. ; addq #1,d6
  7699. ; sub.w d3,d2
  7700. ; bge.s .makecol
  7701. ;.nocol
  7702. ; add.w d3,d2
  7703.  
  7704.  move.w d3,d4
  7705.  move.w d3,d5
  7706.  subq #1,d5
  7707.  
  7708.  move.w d6,d1
  7709.  addq #1,d1
  7710.  move.w d1,a6
  7711.  move.w d2,a5
  7712.  
  7713.  moveq #0,d1
  7714.  move.w sbr,d1
  7715.  move.w fbr,d2
  7716.  sub.w d1,d2
  7717.  ext.l d2
  7718.  asl.w #8,d2
  7719.  asl.w #2,d2
  7720.  divs d3,d2 
  7721.  ext.l d2
  7722.  asl.l #6,d2
  7723.  swap d1
  7724.  
  7725. .pixlopleft:
  7726.  
  7727.  swap d1
  7728.  move.w d1,(a4)+
  7729.  swap d1
  7730.  add.l d2,d1
  7731.  
  7732.  sub.w a5,d4
  7733.  bge.s .nobigstepl
  7734.  sub.w a6,d0
  7735.  add.w d3,d4
  7736.  move.w d0,(a3)+
  7737.  dbra d5,.pixlopleft
  7738.  bra lineflatGOUR
  7739.  
  7740. .nobigstepl
  7741.  sub.w d6,d0
  7742.  move.w d0,(a3)+
  7743.  dbra d5,.pixlopleft
  7744.  bra lineflatGOUR
  7745.  
  7746. lineonrightGOUR:
  7747.  
  7748.  lea (a3,d1*2),a3
  7749.  
  7750.  lea rightbrighttab-rightsidetab(a3),a4
  7751.  
  7752.  cmp.w top(pc),d1
  7753.  bge.s .nonewtop
  7754.  move.w d1,top
  7755. .nonewtop:
  7756.  cmp.w bottom(pc),d3
  7757.  ble.s .nonewbot
  7758.  move.w d3,bottom
  7759. .nonewbot:
  7760.  
  7761.  sub.w d1,d3    ; dy
  7762.  sub.w d0,d2    ; dx
  7763.  blt .linegoingleft
  7764. ; addq #1,d0
  7765.  ext.l d2
  7766.  divs d3,d2
  7767.  move.w d2,d6
  7768.  swap d2
  7769.  
  7770. ; moveq #0,d6
  7771. ; sub.w d3,d2
  7772. ; blt.s .noco
  7773. ;.makeco
  7774. ; addq #1,d6
  7775. ; sub.w d3,d2
  7776. ; bge.s .makeco
  7777. ;.noco
  7778. ; add.w d3,d2
  7779.  
  7780.  move.w d3,d4
  7781.  move.w d3,d5
  7782.  subq #1,d5
  7783.  move.w d6,d1
  7784.  addq #1,d1
  7785.  
  7786.  move.w d1,a6
  7787.  move.w d2,a5
  7788.  
  7789.  moveq #0,d1
  7790.  move.w fbr,d1
  7791.  move.w sbr,d2
  7792.  sub.w d1,d2
  7793.  ext.l d2
  7794.  asl.w #8,d2
  7795.  asl.w #2,d2
  7796.  divs d3,d2 
  7797.  ext.l d2
  7798.  asl.l #6,d2
  7799.  swap d1
  7800.  
  7801. .pixlopright:
  7802.  
  7803.  swap d1
  7804.  move.w d1,(a4)+
  7805.  swap d1
  7806.  add.l d2,d1
  7807.  
  7808.  sub.w a5,d4
  7809.  bge.s .nobigstep
  7810.  add.w a6,d0
  7811.  add.w d3,d4
  7812.  move.w d0,(a3)+
  7813.  dbra d5,.pixlopright
  7814.  bra lineflatGOUR
  7815.  
  7816. .nobigstep
  7817.  add.w d6,d0
  7818.  move.w d0,(a3)+
  7819.  dbra d5,.pixlopright
  7820.  bra lineflatGOUR
  7821.  
  7822. .linegoingleft:
  7823. ; addq #1,d0
  7824.  neg.w d2
  7825.  
  7826.  ext.l d2
  7827.  divs d3,d2
  7828.  move.w d2,d6
  7829.  swap d2
  7830.  
  7831.  
  7832. ; moveq #0,d6
  7833. ; sub.w d3,d2
  7834. ; blt.s .nocol
  7835. ;.makecol
  7836. ; addq #1,d6
  7837. ; sub.w d3,d2
  7838. ; bge.s .makecol
  7839. ;.nocol
  7840. ; add.w d3,d2
  7841.  
  7842.  move.w d3,d4
  7843.  move.w d3,d5
  7844.  subq #1,d5
  7845.  move.w d6,d1
  7846.  addq #1,d1
  7847.  move.w d1,a6
  7848.  move.w d2,a5
  7849.  
  7850.  moveq #0,d1
  7851.  move.w fbr,d1
  7852.  move.w sbr,d2
  7853.  sub.w d1,d2
  7854.  ext.l d2
  7855.  asl.w #8,d2
  7856.  asl.w #2,d2
  7857.  divs d3,d2 
  7858.  ext.l d2
  7859.  asl.l #6,d2
  7860.  swap d1
  7861.  
  7862. .pixlopleft:
  7863.  
  7864.  swap d1
  7865.  move.w d1,(a4)+
  7866.  swap d1
  7867.  add.l d2,d1
  7868.  
  7869.  move.w d0,(a3)+
  7870.  sub.w a5,d4
  7871.  bge.s .nobigstepl
  7872.  sub.w a6,d0
  7873.  add.w d3,d4
  7874.  dbra d5,.pixlopleft
  7875.  bra lineflatGOUR
  7876.  
  7877. .nobigstepl
  7878.  sub.w d6,d0
  7879.  dbra d5,.pixlopleft
  7880.  
  7881. lineflatGOUR:
  7882.  
  7883. bothbehindGOUR:
  7884.  dbra d7,sideloopGOUR
  7885.  
  7886. pastsides:
  7887.  
  7888.  addq #2,a0
  7889.  
  7890.  move.w #104*4,linedir
  7891.  
  7892. ; move.l FASTBUFFER2,a6
  7893. ; add.l BIGMIDDLEY,a6
  7894. ; move.l a6,REFPTR
  7895.  
  7896. ; move.l FASTBUFFER,a6
  7897. ; add.l BIGMIDDLEY,a6
  7898.  
  7899.  move.l frompt,a6
  7900.  add.l BIGMIDDLEY,a6
  7901. ; add.l #104*4*41,a6
  7902.  
  7903.  move.w (a0)+,d6
  7904.  add.w SMALLIT,d6
  7905.  move.w d6,scaleval
  7906.  move.w (a0)+,d6
  7907.  
  7908. ; ifne CHEESEY
  7909. ; move.w d6,d7    ; 000000XX000000YY
  7910. ; lsr.w #6,d6
  7911. ; add.w d6,d7    ; 000000XX0000XXYY
  7912. ; and.b #%111,d6    ; 000000XX00000XYY
  7913. ; add.b d7,d7    ; 000000XX0000XYY0
  7914. ; asl.w #4,d7    ; 00XX0000 XYY00000
  7915. ; and.w #%0010000011100000,d7
  7916. ; move.w d7,d6
  7917. ; endc
  7918.  
  7919.  move.w d6,whichtile
  7920.  move.w (a0)+,d6
  7921.  add.w ZoneBright,d6
  7922.  move.w d6,lighttype
  7923.  move.w above(pc),d6
  7924.  beq groundfloor
  7925. * on ceiling:
  7926.  move.w #-104*4,linedir
  7927.  suba.w #104*4,a6
  7928. groundfloor:
  7929.  
  7930.  move.w xoff,d6
  7931.  move.w zoff,d7
  7932.  add.w xwobxoff,d7
  7933.  add.w xwobzoff,d6
  7934.  ext.l d6
  7935.  ext.l d7
  7936.  
  7937.  tst.b FULLSCR
  7938.  beq.s .shiftit
  7939.  
  7940.  asl.l #2,d6
  7941.  asl.l #2,d7
  7942.  divs #3,d6
  7943.  divs #3,d7
  7944.  swap d6
  7945.  swap d7
  7946.  clr.w d6
  7947.  clr.w d7
  7948.  asr.l #2,d6
  7949.  asr.l #2,d7
  7950.  bra.s .donsht
  7951.  
  7952. .shiftit
  7953.  
  7954. ; divs #3,d6
  7955. ; divs #3,d7
  7956.  swap d6
  7957.  swap d7
  7958.  clr.w d6
  7959.  clr.w d7
  7960.  asr.l #1,d6
  7961.  asr.l #1,d7
  7962. .donsht:
  7963.  move.w scaleval(pc),d3
  7964.  beq.s .samescale
  7965.  bgt.s .scaledown
  7966.  neg.w d3
  7967.  asr.l d3,d7
  7968.  asr.l d3,d6
  7969.  bra.s .samescale
  7970. .scaledown:
  7971.  asl.l d3,d6
  7972.  asl.l d3,d7
  7973. .samescale
  7974.  
  7975.  ifne CHEESEY
  7976.  asr.l #1,d6
  7977.  asr.l #1,d7
  7978.  endc
  7979.  
  7980.  move.l d6,sxoff
  7981.  move.l d7,szoff
  7982.  bra pastscale 
  7983.  
  7984.  asr.l #3,d1
  7985.  asr.l #3,d2
  7986.  asr.l #2,d1
  7987.  asr.l #2,d2
  7988.  asr.l #1,d1
  7989.  asr.l #1,d2
  7990. scaleprogfrom
  7991.  nop
  7992.  nop
  7993.  asl.l #1,d1
  7994.  asl.l #1,d2
  7995.  asl.l #2,d1
  7996.  asl.l #2,d2
  7997.  asl.l #3,d1
  7998.  asl.l #3,d2
  7999.  
  8000. top: dc.w 0
  8001. bottom: dc.w 0
  8002. ypos: dc.l 0
  8003. nfloors: dc.w 0
  8004. lighttype: dc.w 0
  8005. above: dc.w 0 
  8006. linedir: dc.w 0
  8007. distaddr: dc.w 0
  8008.  
  8009. minz: dc.l 0
  8010.  
  8011. leftsidetab:
  8012.  ds.w 512*2
  8013. rightsidetab:
  8014.  ds.w 512*2
  8015. leftbrighttab:
  8016.  ds.w 512*2
  8017. rightbrighttab:
  8018.  ds.w 512*2
  8019.  
  8020. PointBrights:
  8021.  dc.l 0
  8022. CurrentPointBrights:
  8023.  ds.l 2*256*10
  8024.  
  8025. movespd: dc.w 0
  8026. largespd: dc.l 0
  8027. disttobot: dc.w 0
  8028.  
  8029. pastscale:
  8030.  
  8031.  
  8032.  tst.b drawit(pc)
  8033.  beq dontdrawfloor
  8034.  
  8035.  tst.b DOUBLEHEIGHT
  8036.  beq pix1h
  8037.  
  8038.  move.l a0,-(a7)
  8039. ; move.w linedir,d1
  8040. ; add.w d1,linedir
  8041.  
  8042.  move.l #leftsidetab,a4
  8043.  move.w top(pc),d1
  8044.  tst.w above
  8045.  beq.s .clipfloor
  8046.  
  8047. ; sub.w #104*4,a6
  8048.  
  8049.  move.w MIDDLEY,d7
  8050.  subq #1,d7
  8051.  sub.w d1,d7
  8052.  move.w d7,disttobot
  8053.  
  8054.  move.w bottom(pc),d7
  8055.  move.w MIDDLEY,d3
  8056.  move.w d3,d4
  8057.  sub.w topclip,d3
  8058.  sub.w botclip,d4
  8059.  cmp.w d3,d1
  8060.  bge predontdrawfloor
  8061.  cmp.w d4,d7
  8062.  blt predontdrawfloor
  8063.  cmp.w d4,d1
  8064.  bge.s .nocliptoproof
  8065.  move.w d4,d1
  8066. .nocliptoproof
  8067.  cmp.w d3,d7
  8068.  blt .doneclip
  8069.  move.w d3,d7
  8070.  bra .doneclip
  8071.  
  8072. .clipfloor:
  8073.  move.w BOTTOMY,d7
  8074.  sub.w MIDDLEY,d7
  8075.  subq #1,d7
  8076.  sub.w d1,d7
  8077.  move.w d7,disttobot
  8078.  
  8079.  move.w bottom(pc),d7
  8080.  move.w botclip,d4
  8081.  sub.w MIDDLEY,d4
  8082.  cmp.w d4,d1
  8083.  bge predontdrawfloor
  8084.  move.w topclip,d3
  8085.  sub.w MIDDLEY,d3
  8086.  cmp.w d3,d1
  8087.  bge.s .nocliptopfloor
  8088.  move.w d3,d1
  8089. .nocliptopfloor 
  8090.  cmp.w d3,d7
  8091.  ble predontdrawfloor
  8092.  cmp.w d4,d7
  8093.  blt.s .noclipbotfloor
  8094.  move.w d4,d7
  8095. .noclipbotfloor:
  8096.  
  8097. .doneclip:
  8098.  
  8099.  lea (a4,d1*2),a4
  8100. ; addq #1,d7
  8101.  sub.w d1,d7
  8102.  
  8103. ;moveq #0,d0
  8104.  asr.w #1,d1
  8105. ; addx d0,d1
  8106.  
  8107. ; move.l #dists,a2
  8108.  move.w distaddr,d0
  8109.  muls #64,d0
  8110.  move.l d0,a2
  8111. ; muls #25,d0
  8112. ; adda.w d0,a2
  8113. ; lea (a2,d1*2),a2
  8114.  asr.w #1,d7
  8115.  ble predontdrawfloor 
  8116.  move.w d1,d0
  8117.  bne.s .notzero
  8118.  moveq #1,d0
  8119. .notzero
  8120.  add.w d0,d0
  8121.  muls linedir,d1
  8122.  add.l d1,a6
  8123.  
  8124.  
  8125. ;;; sub.l d1,REFPTR
  8126.  move.l #floorpalscaled,a1
  8127.  move.l LineToUse,a5
  8128.  
  8129.  move.w #4,tonextline
  8130.  
  8131.  bra pix2h
  8132.  
  8133. pix1h:
  8134.  
  8135.  move.l a0,-(a7)
  8136.  
  8137.  move.l #leftsidetab,a4
  8138.  move.w top(pc),d1
  8139.   
  8140.  tst.w above
  8141.  beq.s clipfloor
  8142.  
  8143.  move.w MIDDLEY,d7
  8144.  subq #1,d7
  8145.  sub.w d1,d7
  8146.  move.w d7,disttobot
  8147.  
  8148.  move.w bottom(pc),d7
  8149.  move.w MIDDLEY,d3
  8150.  move.w d3,d4
  8151.  sub.w topclip,d3
  8152.  sub.w botclip,d4
  8153.  cmp.w d3,d1
  8154.  bge predontdrawfloor
  8155.  cmp.w d4,d7
  8156.  blt predontdrawfloor
  8157.  cmp.w d4,d1
  8158.  bge.s .nocliptoproof
  8159.  move.w d4,d1
  8160. .nocliptoproof
  8161.  cmp.w d3,d7
  8162.  blt doneclip
  8163.  move.w d3,d7
  8164.  bra doneclip
  8165.  
  8166. clipfloor:
  8167.  move.w BOTTOMY,d7
  8168.  sub.w MIDDLEY,d7
  8169.  subq #1,d7
  8170.  sub.w d1,d7
  8171.  move.w d7,disttobot
  8172.  
  8173.  move.w bottom(pc),d7
  8174.  move.w botclip,d4
  8175.  sub.w MIDDLEY,d4
  8176.  cmp.w d4,d1
  8177.  bge predontdrawfloor
  8178.  move.w topclip,d3
  8179.  sub.w MIDDLEY,d3
  8180.  cmp.w d3,d1
  8181.  bge.s .nocliptopfloor
  8182.  move.w d3,d1
  8183. .nocliptopfloor 
  8184.  cmp.w d3,d7
  8185.  ble predontdrawfloor
  8186.  cmp.w d4,d7
  8187.  blt.s .noclipbotfloor
  8188.  move.w d4,d7
  8189. .noclipbotfloor:
  8190.  
  8191. doneclip:
  8192.  
  8193.  lea (a4,d1*2),a4
  8194. ; move.l #dists,a2
  8195.  move.w distaddr,d0
  8196.  muls #64,d0
  8197.  move.l d0,a2
  8198. ; muls #25,d0
  8199. ; adda.w d0,a2
  8200. ; lea (a2,d1*2),a2
  8201.  sub.w d1,d7
  8202.  ble predontdrawfloor 
  8203.  move.w d1,d0
  8204.  bne.s .notzero
  8205.  moveq #1,d0
  8206. .notzero
  8207.  muls linedir,d1
  8208.  add.l d1,a6
  8209.  
  8210. ;;;; sub.l d1,REFPTR
  8211.  move.l #floorpalscaled,a1
  8212.  move.l LineToUse,a5
  8213.  
  8214.  move.w #2,tonextline
  8215.  
  8216. pix2h:
  8217.  
  8218.  tst.b gourfloor
  8219.  bne dogourfloor
  8220.  
  8221.  tst.b anyclipping
  8222.  beq dofloornoclip
  8223.  
  8224. dofloor:
  8225. ; move.w (a2)+,d0
  8226.  move.w leftclip,d3
  8227.  move.w rightclip,d4
  8228.  move.w rightsidetab-leftsidetab(a4),d2
  8229.  
  8230.  addq #1,d2
  8231.  cmp.w d3,d2
  8232.  ble.s nodrawline
  8233.  cmp.w d4,d2
  8234.  ble.s noclipright
  8235.  move.w d4,d2
  8236. noclipright:
  8237.  move.w (a4),d1
  8238.  cmp.w d4,d1
  8239.  bge.s nodrawline
  8240.  cmp.w d3,d1
  8241.  bge.s noclipleft
  8242.  move.w d3,d1
  8243. noclipleft:
  8244.  cmp.w d1,d2
  8245.  ble.s nodrawline
  8246.  
  8247.  move.w d1,leftedge
  8248.  move.w d2,rightedge
  8249.  
  8250. ; moveq #0,d1
  8251. ; moveq #0,d3
  8252. ; move.w leftbrighttab-leftsidetab(a4),d1
  8253. ; bge.s .okbl
  8254. ; moveq #0,d1
  8255. ;.okbl:
  8256.  
  8257. ; move.w rightbrighttab-leftsidetab(a4),d3
  8258. ; bge.s .okbr
  8259. ; moveq #0,d3
  8260. ;.okbr:
  8261.  
  8262. ; sub.w d1,d3
  8263. ; asl.w #8,d1
  8264. ; move.l d1,leftbright
  8265. ; swap d3
  8266. ; asr.l #5,d3
  8267. ; divs d5,d3
  8268. ; move.w d3,d5
  8269. ; muls.w d6,d5
  8270. ; asr.l #3,d5
  8271. ; clr.b d5
  8272. ; add.w d5,leftbright+2
  8273.  
  8274. ; ext.l d3
  8275. ; asl.l #5,d3
  8276. ; swap d3
  8277. ; asl.w #8,d3
  8278. ; move.l d3,brightspd
  8279.  
  8280.  move.l a6,a3
  8281.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8282.  move.l a2,d7
  8283.  asl.l #2,d7
  8284.  ext.l d0
  8285.  divs.l d0,d7
  8286.  move.l d7,d0
  8287.  jsr (a5)
  8288.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8289. nodrawline
  8290.  sub.w #1,disttobot
  8291.  move.w linedir(pc),d3
  8292.  adda.w d3,a6
  8293. ; ext.l d3
  8294. ; sub.l d3,REFPTR
  8295.  move.w tonextline,d3
  8296.  add.w d3,a4
  8297.  asr.w #1,d3
  8298.  add.w d3,d0
  8299.  subq #1,d7
  8300.  bgt dofloor
  8301.  
  8302. predontdrawfloor
  8303.  move.l (a7)+,a0
  8304.  
  8305. dontdrawfloor:
  8306.  
  8307.  rts
  8308.  
  8309. tonextline: dc.w 0
  8310. anyclipping: dc.w 0
  8311.  
  8312. dofloornoclip:
  8313. ; move.w (a2)+,d0
  8314.  move.w rightsidetab-leftsidetab(a4),d2
  8315.  addq #1,d2
  8316.  move.w (a4),d1
  8317.  move.w d1,leftedge
  8318.  move.w d2,rightedge
  8319.  
  8320. ; sub.w d1,d2
  8321.  
  8322. ; moveq #0,d1
  8323. ; moveq #0,d3
  8324. ; move.w leftbrighttab-leftsidetab(a4),d1
  8325. ; bge.s .okbl
  8326. ; moveq #0,d1
  8327. ;.okbl:
  8328.  
  8329. ; move.w rightbrighttab-leftsidetab(a4),d3
  8330. ; bge.s .okbr
  8331. ; moveq #0,d3
  8332. ;.okbr:
  8333.  
  8334. ; sub.w d1,d3
  8335. ; asl.w #8,d1
  8336. ; move.l d1,leftbright
  8337. ; swap d3
  8338. ; asr.l #5,d3
  8339. ; divs d2,d3
  8340. ; ext.l d3
  8341. ; asl.l #5,d3
  8342. ; swap d3
  8343. ; asl.w #8,d3
  8344. ; move.l d3,brightspd
  8345.  
  8346.  move.l a6,a3
  8347.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8348.  move.l a2,d7
  8349.  asl.l #2,d7
  8350.  ext.l d0
  8351.  divs.l d0,d7
  8352.  move.l d7,d0
  8353.  jsr (a5)
  8354.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8355.  sub.w #1,disttobot
  8356.  move.w linedir(pc),d3
  8357.  adda.w d3,a6
  8358. ; ext.l d3
  8359. ; sub.l d3,REFPTR
  8360.  move.w tonextline,d3
  8361.  add.w d3,a4
  8362.  asr.w #1,d3
  8363.  add.w d3,d0
  8364.  subq #1,d7
  8365.  bgt dofloornoclip
  8366.  
  8367.  bra predontdrawfloor
  8368.  
  8369. dogourfloor:
  8370.  tst.b anyclipping
  8371.  beq dofloornoclipGOUR
  8372.  
  8373. dofloorGOUR:
  8374. ; move.w (a2)+,d0
  8375.  move.w leftclip,d3
  8376.  move.w rightclip,d4
  8377.  move.w rightsidetab-leftsidetab(a4),d2
  8378.  
  8379.  move.w d2,d5
  8380.  sub.w (a4),d5
  8381.  addq #1,d5
  8382.  moveq #0,d6
  8383.  
  8384.  addq #1,d2
  8385.  cmp.w d3,d2
  8386.  ble nodrawlineGOUR
  8387.  cmp.w d4,d2
  8388.  ble.s nocliprightGOUR
  8389.  move.w d4,d2
  8390. nocliprightGOUR:
  8391.  move.w (a4),d1
  8392.  cmp.w d4,d1
  8393.  bge nodrawlineGOUR
  8394.  cmp.w d3,d1
  8395.  bge.s noclipleftGOUR
  8396.  move.w d3,d6
  8397.  subq #1,d6
  8398.  sub.w d1,d6
  8399.  move.w d3,d1
  8400. noclipleftGOUR:
  8401.  cmp.w d1,d2
  8402.  ble nodrawlineGOUR
  8403.  
  8404.  move.w d1,leftedge
  8405.  move.w d2,rightedge
  8406.  
  8407.  move.l a2,d2
  8408.  asl.l #2,d2
  8409.  ext.l d0
  8410.  divs.l d0,d2
  8411.  move.l d2,dst
  8412.  asr.l #7,d2
  8413.  asr.l #2,d2
  8414. ; addq #5,d2
  8415. ; add.w lighttype,d2
  8416.  
  8417.  moveq #0,d1
  8418.  moveq #0,d3
  8419.  move.w leftbrighttab-leftsidetab(a4),d1
  8420.  add.w d2,d1
  8421.  bge.s .okbl
  8422.  moveq #0,d1
  8423. .okbl:
  8424. ; asr.w #1,d1
  8425.  cmp.w #30,d1
  8426.  ble.s .okdl
  8427.  move.w #30,d1
  8428. .okdl:
  8429.  
  8430.  move.w rightbrighttab-leftsidetab(a4),d3
  8431.  add.w d2,d3
  8432.  bge.s .okbr
  8433.  moveq #0,d3
  8434. .okbr:
  8435. ; asr.w #1,d3
  8436.  cmp.w #30,d3
  8437.  ble.s .okdr
  8438.  move.w #30,d3
  8439. .okdr:
  8440.  
  8441.  sub.w d1,d3
  8442.  asl.w #8,d1
  8443.  move.w d1,leftbright
  8444.  swap d3
  8445.  tst.l d3
  8446.  bgt.s .OKITSPOSALREADY 
  8447.  neg.l d3
  8448.  asr.l #6,d3
  8449.  divs d5,d3
  8450.  neg.w d3
  8451.  bra.s .OKNOWITSNEG
  8452.  
  8453. .OKITSPOSALREADY
  8454.  asr.l #6,d3
  8455.  divs d5,d3
  8456. .OKNOWITSNEG
  8457.  muls d3,d6
  8458.  add.w #256*4,d6
  8459.  asr.w #2,d6
  8460.  clr.b d6
  8461.  add.w leftbright,d6
  8462.  bge.s .oklbnn
  8463.  moveq #0,d6
  8464. .oklbnn:
  8465.  move.w d6,leftbright
  8466.  
  8467.  ext.l d3
  8468.  asr.l #2,d3
  8469. ; swap d3
  8470. ; asl.w #8,d3
  8471.  move.w d3,brightspd
  8472.  
  8473.  move.l a6,a3
  8474.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8475.  move.l dst,d0
  8476.  move.l #floorpalscaled,a1
  8477.  move.l floortile,a0
  8478.  adda.w whichtile,a0
  8479.  jsr pastfloorbright
  8480.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8481. nodrawlineGOUR
  8482.  
  8483.  sub.w #1,disttobot
  8484.  
  8485.  move.w linedir(pc),d3
  8486.  adda.w d3,a6
  8487. ; ext.l d3
  8488. ; sub.l d3,REFPTR
  8489.  move.w tonextline,d3
  8490.  add.w d3,a4
  8491.  asr.w #1,d3
  8492.  add.w d3,d0
  8493.  subq #1,d7
  8494.  bgt dofloorGOUR
  8495.  
  8496. predontdrawfloorGOUR
  8497.  move.l (a7)+,a0
  8498.  
  8499. dontdrawfloorGOUR:
  8500.  
  8501.  rts
  8502.  
  8503. REFPTR: dc.l 0
  8504.  
  8505. dofloornoclipGOUR:
  8506. ; move.w (a2)+,d0
  8507.  move.w rightsidetab-leftsidetab(a4),d2
  8508.  addq #1,d2
  8509.  move.w (a4),d1
  8510.  move.w d1,leftedge
  8511.  move.w d2,rightedge
  8512.  
  8513.  sub.w d1,d2
  8514.  
  8515.  move.l a2,d6
  8516.  asl.l #2,d6
  8517.  ext.l d0
  8518.  divs.l d0,d6
  8519.  move.l d6,d5
  8520.  asr.l #7,d5
  8521.  asr.l #2,d5
  8522. ; addq #5,d5
  8523. ; add.w lighttype,d5
  8524.  
  8525.  moveq #0,d1
  8526.  moveq #0,d3
  8527.  move.w leftbrighttab-leftsidetab(a4),d1
  8528.  add.w d5,d1
  8529.  bge.s .okbl
  8530.  moveq #0,d1
  8531. .okbl:
  8532. ; asr.w #1,d1
  8533.  cmp.w #30,d1
  8534.  ble.s .okdl
  8535.  move.w #30,d1
  8536. .okdl:
  8537.  
  8538.  move.w rightbrighttab-leftsidetab(a4),d3
  8539.  add.w d5,d3
  8540.  bge.s .okbr
  8541.  moveq #0,d3
  8542. .okbr:
  8543. ; asr.w #1,d3
  8544.  cmp.w #30,d3
  8545.  ble.s .okdr
  8546.  move.w #30,d3
  8547. .okdr:
  8548.  
  8549. ; sub.w d1,d3
  8550. ; asl.w #8,d1
  8551. ; move.l d1,leftbright
  8552. ; swap d3
  8553. ; asr.l #5,d3
  8554. ; divs d2,d3
  8555. ; ext.l d3
  8556. ; asl.l #5,d3
  8557. ; swap d3
  8558. ; asl.w #8,d3
  8559. ; move.l d3,brightspd
  8560.  
  8561.  sub.w d1,d3
  8562.  asl.w #8,d1
  8563.  move.w d1,leftbright
  8564.  swap d3
  8565.  ext.l d2
  8566.  divs.l d2,d3
  8567.  asr.l #8,d3
  8568.  move.w d3,brightspd
  8569.  
  8570.  move.l a6,a3
  8571.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8572.  move.l d6,d0
  8573.  move.l d0,dst
  8574.  move.l #floorpalscaled,a1
  8575.  move.l floortile,a0
  8576.  adda.w whichtile,a0
  8577.  jsr pastfloorbright
  8578.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8579.  sub.w #1,disttobot
  8580.  
  8581.  move.w linedir(pc),d3
  8582.  adda.w d3,a6
  8583. ; ext.l d3
  8584. ; sub.l d3,REFPTR
  8585.  
  8586.  move.w tonextline,d3
  8587.  add.w d3,a4
  8588.  asr.w #1,d3
  8589.  add.w d3,d0
  8590.  subq #1,d7
  8591.  bgt dofloornoclipGOUR
  8592.  
  8593.  bra predontdrawfloorGOUR
  8594.  
  8595.  
  8596.  
  8597. dists:
  8598. ; incbin "floordists"
  8599. drawit: dc.w 0
  8600.  
  8601. LineToUse: dc.l 0
  8602.  
  8603. ***************************
  8604. * Right then, time for the floor
  8605. * routine...
  8606. * For test purposes, give it
  8607. * a3 = point to screen
  8608. * d0= z distance away
  8609. * and sinval+cosval must be set up.
  8610. ***************************
  8611.  
  8612. BLACKFLOOR:
  8613.  moveq #0,d0
  8614.  bra DOBLACK
  8615.  
  8616. SimpleFloorLine:
  8617.  
  8618.  
  8619. ; CACHE_OFF d2
  8620.  
  8621.  move.l #0,FIRSTLEN
  8622.  move.w #0,THIRDLEN
  8623.  
  8624.  move.w leftedge,d6
  8625.  asr.w #1,d6
  8626.  move.w rightedge,d7
  8627.  asr.w #1,d7
  8628.  
  8629.  sub.w d6,d7
  8630.  
  8631.  lea (a3,d6.w*4),a3
  8632.  
  8633.  move.w d6,d3
  8634.  move.w d3,d1
  8635.  asr.w #5,d1
  8636.  lea (a3,d1.w*4),a3
  8637.  
  8638.  asl.w #5,d1
  8639.  sub.w d1,d3
  8640.  
  8641.  neg.w d3
  8642.  add.w #32,d3
  8643.  
  8644.  cmp.w d7,d3
  8645.  bge.s .allinonestrip
  8646.  
  8647. ; The damn thing overlaps the end of this strip.
  8648.  
  8649.  sub.w d3,d7    ; remaining width.
  8650.  move.w d3,FIRSTLEN
  8651.  
  8652.  cmp.w #32,d7
  8653.  ble.s .allintwostrips
  8654.  
  8655.  move.w #32,SECLEN
  8656.  sub.w #32,d7
  8657.  move.w d7,THIRDLEN
  8658.  bra .donestrips
  8659.  
  8660. .allintwostrips
  8661.  move.w d7,SECLEN
  8662.  bra .donestrips
  8663.  
  8664. .allinonestrip
  8665.  move.w d7,FIRSTLEN
  8666.  
  8667. .donestrips:
  8668.  
  8669. ; tst.b CLRNOFLOOR
  8670. ; bne.s BLACKFLOOR
  8671.  
  8672.  move.l #PLAINSCALE,a2
  8673.  
  8674.  move.w d0,d2
  8675.  move.w lighttype,d1
  8676.  asr.w #8,d2
  8677. ; add.w #5,d1
  8678.  add.w d2,d1
  8679.  bge.s .fixedbright
  8680.  moveq #0,d1
  8681. .fixedbright:
  8682.  cmp.w #28,d1
  8683.  ble.s .smallbright
  8684.  move.w #28,d1
  8685. .smallbright:
  8686.  lea (a2,d1.w*2),a2
  8687.  
  8688.  move.w whichtile,d0
  8689.  move.w d0,d1
  8690.  and.w #$3,d1
  8691.  and.w #$300,d0
  8692.  lsl.b #6,d1
  8693.  move.b d1,d0
  8694.  move.w d0,tstwhich
  8695.  move.w (a2,d0.w),d0
  8696.  
  8697.  move.w FIRSTLEN,d2
  8698.  beq.s .nolen
  8699.  bsr DOIT
  8700.  move.w SECLEN,d2
  8701.  beq.s .nolen
  8702.  addq #4,a3
  8703.  bsr DOIT
  8704.  addq #4,a3
  8705.  move.w THIRDLEN,d2
  8706.  beq.s .nolen
  8707.  bsr DOIT
  8708. .nolen:
  8709.  rts
  8710.  
  8711. DOIT:
  8712.  subq #1,d2
  8713. doitlop:
  8714.  move.w d0,(a3)
  8715.  addq #4,a3
  8716.  dbra d2,doitlop
  8717.  rts
  8718.  
  8719. DOBLACK:
  8720.  jsr (a1)
  8721.  move.w d4,(a1,d3.w*4)
  8722.  
  8723. ; CACHE_ON d2
  8724.  
  8725.  rts
  8726.  
  8727. tstwhich: dc.w 0
  8728. whichtile: dc.w 0
  8729.   
  8730. PLAINSCALE: 
  8731.  incbin "ab3:includes/plainscale"
  8732.   
  8733. storeit: dc.l 0
  8734.  
  8735. ;doacrossline:
  8736. ;val SET 0
  8737. ; REPT 32
  8738. ; move.w d0,val(a3)
  8739. ;val SET val+4
  8740. ; ENDR
  8741. ;val SET val+4
  8742. ; REPT 32
  8743. ; move.w d0,val(a3)
  8744. ;val SET val+4
  8745. ; ENDR
  8746. ;val SET val+4
  8747. ; REPT 32
  8748. ; move.w d0,val(a3)
  8749. ;val SET val+4
  8750. ; ENDR
  8751. ; rts
  8752.  
  8753.  
  8754. leftedge: dc.w 0
  8755. rightedge: dc.w 0
  8756.  
  8757. rndpt: dc.l rndtab
  8758.  
  8759.  
  8760. dst: dc.l 0
  8761.  
  8762. FloorLine:
  8763.  
  8764.  move.l floortile,a0
  8765.  adda.w whichtile,a0
  8766.  move.w lighttype,d1
  8767.  move.l d0,dst    ; *4
  8768.  move.l d0,d2    ; *4
  8769. *********************
  8770. * Old version
  8771.  asr.l #2,d2
  8772.  asr.l #8,d2
  8773.  add.w #5,d1
  8774. *********************
  8775. ; asr.w #3,d2
  8776. ; sub.w #4,d2
  8777. ; cmp.w #6,d2
  8778. ; blt.s flbrbr
  8779. ; move.w #6,d2
  8780. ;flbrbr:
  8781. *********************
  8782.  add.w d2,d1
  8783.  bge.s .fixedbright
  8784.  moveq #0,d1
  8785. .fixedbright:
  8786.  cmp.w #28,d1
  8787.  ble.s .smallbright
  8788.  move.w #28,d1
  8789. .smallbright:
  8790.  move.l #floorpalscaled,a1
  8791.  add.l floorbright(pc,d1.w*4),a1
  8792.  bra pastfloorbright
  8793.  
  8794. ConstCol: dc.w 0
  8795.  
  8796. BumpLine:
  8797.  
  8798.  tst.b smoothbumps
  8799.  beq.s Chunky
  8800.  
  8801.  move.l #SmoothTile,a0
  8802.  lea Smoothscalecols,a1
  8803.  bra pastast
  8804.  
  8805. Chunky:
  8806.  
  8807.  moveq #0,d2
  8808.  move.l #Bumptile,a0
  8809.  move.w whichtile,d2
  8810.  adda.w d2,a0
  8811.  ror.l #2,d2
  8812.  lsr.w #6,d2
  8813.  rol.l #2,d2
  8814.  and.w #15,d2
  8815.  move.l #ConstCols,a1
  8816.  move.w (a1,d2.w*2),ConstCol
  8817.  lea Bumpscalecols,a1
  8818.  
  8819. pastast:
  8820.  move.w lighttype,d1
  8821.  
  8822.  move.l d0,dst
  8823.  
  8824.  move.l d0,d2
  8825. *********************
  8826. * Old version
  8827.  asr.l #2,d2
  8828.  asr.l #8,d2
  8829.  add.w #5,d1
  8830. *********************
  8831. ; asr.w #3,d2
  8832. ; sub.w #4,d2
  8833. ; cmp.w #6,d2
  8834. ; blt.s flbrbr
  8835. ; move.w #6,d2
  8836. ;flbrbr:
  8837. *********************
  8838.  add.w d2,d1
  8839.  bge.s .fixedbright
  8840.  moveq #0,d1
  8841. .fixedbright:
  8842.  cmp.w #31,d1
  8843.  ble.s .smallbright
  8844.  move.w #31,d1
  8845. .smallbright:
  8846.  add.l floorbright(pc,d1.w*4),a1
  8847.  bra pastfloorbright
  8848.  
  8849.  
  8850. floorbright:
  8851.  dc.l 512*0
  8852.  dc.l 512*1
  8853.  dc.l 512*2
  8854.  dc.l 512*3
  8855.  dc.l 512*4
  8856.  
  8857.  dc.l 512*5
  8858.  dc.l 512*6
  8859.  dc.l 512*7
  8860.  dc.l 512*8
  8861.  dc.l 512*9
  8862.  
  8863.  dc.l 512*10
  8864.  dc.l 512*11
  8865.  dc.l 512*12
  8866.  dc.l 512*13
  8867.  dc.l 512*14
  8868.  
  8869.  dc.l 512*15
  8870.  dc.l 512*16
  8871.  dc.l 512*17
  8872.  dc.l 512*18
  8873.  dc.l 512*19
  8874.  
  8875.  dc.l 512*20
  8876.  dc.l 512*21
  8877.  dc.l 512*22
  8878.  dc.l 512*23
  8879.  dc.l 512*24
  8880.  
  8881.  dc.l 512*25
  8882.  dc.l 512*26
  8883.  dc.l 512*27
  8884.  dc.l 512*28
  8885.  dc.l 512*29
  8886.  
  8887.  dc.l 512*30
  8888.  dc.l 512*31
  8889.  
  8890. widthleft: dc.w 0
  8891. scaleval: dc.w 0
  8892. sxoff: dc.l 0
  8893. szoff: dc.l 0
  8894. xoff34: dc.w 0
  8895. zoff34: dc.w 0
  8896. scosval: dc.w 0
  8897. ssinval: dc.w 0
  8898.  
  8899.  
  8900. floorsetbright:
  8901.  move.l #walltiles,a0
  8902.  
  8903. pastfloorbright:
  8904.  
  8905.  move.l d0,d1
  8906.  muls cosval,d1    ; change in x across whole width
  8907.  move.l d0,d2
  8908.  muls sinval,d2    ; change in z across whole width
  8909.  neg.l d2
  8910.  ifne CHEESEY
  8911.  asr.l #3,d2
  8912.  asr.l #3,d1
  8913.  endc
  8914.  ifeq CHEESEY
  8915.  asr.l #2,d2
  8916.  asr.l #2,d1
  8917.  endc
  8918. scaleprog:
  8919.  move.w scaleval(pc),d3
  8920.  beq.s .samescale
  8921.  bgt.s .scaledown
  8922.  neg.w d3
  8923.  asr.l d3,d1
  8924.  asr.l d3,d2
  8925.  bra.s .samescale
  8926. .scaledown:
  8927.  asl.l d3,d1
  8928.  asl.l d3,d2
  8929. .samescale
  8930.  
  8931.  
  8932.  move.l d1,d3 ;    z cos
  8933.  move.l d3,d6
  8934.  move.l d3,d5
  8935.  asr.l #1,d6
  8936.  add.l d6,d3
  8937.  asr.l #1,d3
  8938.  
  8939.  move.l d2,d4    ; z sin
  8940.  move.l d4,d6
  8941.  asr.l #1,d6
  8942.  add.l d4,d6
  8943.  add.l d3,d4
  8944.  neg.l d4    ; start x
  8945.  
  8946.  asr.l #1,d6    ; zsin/2
  8947.  sub.l d6,d5    ; start z
  8948.  
  8949.  add.l sxoff,d4
  8950.  add.l szoff,d5
  8951.  
  8952.  tst.b FULLSCR
  8953.  beq.s .nob
  8954.  
  8955.  moveq #0,d6
  8956.  move.w leftedge(pc),d6
  8957.  beq.s .nomultleftB
  8958.  
  8959.  add.l d6,d6
  8960.  divs #3,d6
  8961.  ext.l d6
  8962.  
  8963.  move.l d1,a4
  8964.  move.l d2,a5
  8965.  
  8966.  muls.l d6,d1
  8967.  asr.l #7,d1
  8968.  add.l d1,d4
  8969.  
  8970.  muls.l d6,d2
  8971.  asr.l #7,d2
  8972.  add.l d2,d5
  8973.  move.l a4,d1
  8974.  move.l a5,d2
  8975.  
  8976.  move.w leftedge(pc),d6
  8977.  
  8978. .nomultleftB:
  8979.  
  8980.  move.w d4,startsmoothx
  8981.  move.w d5,startsmoothz
  8982.  
  8983.  asr.l #8,d4
  8984.  asl.l #8,d5
  8985. ; add.w szoff,d5
  8986. ; add.w sxoff,d4
  8987. ; and.w #63,d4
  8988. ; and.w #63*256,d5
  8989.  
  8990.  move.w d4,d5
  8991.  
  8992.  asr.l #6,d1
  8993.  asr.l #6,d2
  8994.  divs.l #3,d1
  8995.  divs.l #3,d2
  8996.  
  8997.  bra.s doneallmult
  8998.  
  8999. .nob 
  9000.  
  9001.  moveq #0,d6
  9002.  move.w leftedge(pc),d6
  9003.  beq.s nomultleft
  9004.  
  9005.  move.l d1,a4
  9006.  move.l d2,a5
  9007.  
  9008.  muls.l d6,d1
  9009.  asr.l #7,d1
  9010.  add.l d1,d4
  9011.  
  9012.  muls.l d6,d2
  9013.  asr.l #7,d2
  9014.  add.l d2,d5
  9015.  move.l a4,d1
  9016.  move.l a5,d2
  9017.  
  9018.  move.w leftedge(pc),d6
  9019.  
  9020. nomultleft:
  9021.  
  9022.  move.w d4,startsmoothx
  9023.  move.w d5,startsmoothz
  9024.  
  9025.  asr.l #8,d4
  9026.  asl.l #8,d5
  9027.  
  9028.  
  9029. ; add.w szoff,d5
  9030. ; add.w sxoff,d4
  9031. ; and.w #63,d4
  9032. ; and.w #63*256,d5
  9033.  
  9034.  move.w d4,d5
  9035.  
  9036.  asr.l #7,d1
  9037.  asr.l #7,d2
  9038. ; divs.l #3,d1
  9039. ; divs.l #3,d2
  9040.  
  9041. doneallmult:
  9042.  
  9043.  move.w d1,a4
  9044.  move.w d2,a5
  9045.  asl.l #8,d2
  9046. ; and.w #%0011111100000000,d2
  9047.  asr.l #8,d1
  9048.  move.w d1,d2
  9049.  ifeq CHEESEY
  9050.  move.l #$3fff3fff,d1
  9051.  endc
  9052.  ifne CHEESEY
  9053.  move.l #$1fff1fff,d1
  9054.  endc
  9055.  and.l d1,d5
  9056. ; swap d5
  9057. ; move.w startsmoothz,d5
  9058. ; swap d5
  9059. ; swap d2
  9060. ; move.w a5,d2
  9061. ; swap d2
  9062.  
  9063. ***********************************
  9064.  
  9065.  
  9066.  tst.b DOUBLEWIDTH
  9067.  beq .nodoub
  9068.  
  9069.  move.l #0,FIRSTLEN
  9070.  move.w #0,THIRDLEN
  9071.  
  9072.  and.b #$fe,d6
  9073.  
  9074.  move.w d6,a2
  9075.  moveq #0,d0 
  9076.  move.w rightedge(pc),d3 
  9077.  lea (a3,d6.w*2),a3 
  9078.  move.w d3,d7
  9079.  sub.w a2,d7
  9080.  asr.w #1,d7
  9081.  
  9082.  move.w a2,d3
  9083.  asr.w #1,d3
  9084.  
  9085.  move.w d3,d0
  9086.  asr.w #5,d0
  9087.  asl.w #2,d0
  9088.  add.w d0,a3    ; starting pos.
  9089.  
  9090.  asl.w #3,d0
  9091.  sub.w d0,d3    ; modulo 32
  9092.  
  9093.  neg.w d3
  9094.  add.w #32,d3    ; remainder in strip
  9095.  
  9096.  cmp.w d7,d3
  9097.  bge.s .allinonestrip
  9098.  
  9099. ; The damn thing overlaps the end of this strip.
  9100.  
  9101.  sub.w d3,d7    ; remaining width.
  9102.  move.w d3,FIRSTLEN
  9103.  
  9104.  cmp.w #32,d7
  9105.  ble.s .allintwostrips
  9106.  
  9107.  move.w #32,SECLEN
  9108.  sub.w #32,d7
  9109.  move.w d7,THIRDLEN
  9110.  bra .donestrips
  9111.  
  9112. .allintwostrips
  9113.  move.w d7,SECLEN
  9114.  bra .donestrips
  9115.  
  9116. .allinonestrip
  9117.  move.w d7,FIRSTLEN
  9118.  
  9119. .donestrips:
  9120.  moveq #0,d0
  9121.  move.w startsmoothx,d3
  9122.  
  9123.  tst.b usewater
  9124.  bne texturedwaterDOUB
  9125. ; tst.b gourfloor
  9126.  bra gouraudfloorDOUB
  9127.  
  9128. .whichthird:
  9129. val SET 32
  9130.  REPT 32
  9131.  dc.b 0,val
  9132. val SET val-1
  9133.  ENDR 
  9134. val SET 32
  9135.  REPT 32
  9136.  dc.b 4,val
  9137. val SET val-1
  9138.  ENDR 
  9139. val SET 32
  9140.  REPT 32
  9141.  dc.b 8,val
  9142. val SET val-1
  9143.  ENDR 
  9144.  
  9145. .nodoub:
  9146.  
  9147.  move.w d6,a2
  9148.  moveq #0,d0 
  9149.  move.w rightedge(pc),d3 
  9150.  lea (a3,a2.w),a3 
  9151.  move.w d3,d7
  9152.  sub.w a2,d7
  9153.  
  9154. intofirststrip:
  9155. allintofirst:
  9156.  
  9157.  move.w startsmoothx,d3
  9158.  
  9159. tstwat:
  9160.  
  9161.  tst.b usewater
  9162.  bne texturedwater
  9163. ; tst.b gourfloor
  9164.  bra gouraudfloor
  9165.  
  9166.  
  9167.  
  9168. ******************************
  9169. * BumpMap the floor/ceiling! *
  9170.  tst.b usebumps
  9171.  bne.s BumpMap
  9172. ******************************
  9173.  
  9174. ordinary:
  9175.  moveq #0,d0
  9176.  
  9177.  dbra d7,acrossscrn
  9178.  rts
  9179.  
  9180. usebumps: dc.w $0
  9181. smoothbumps: dc.w $0
  9182. gourfloor: dc.w 0
  9183.  
  9184.  include "ab3:CHEESESAUCE/bumpmap.s"
  9185.  
  9186.  CNOP 0,4
  9187. backbefore:
  9188.  and.w d1,d5
  9189.  move.b (a0,d5.w*4),d0
  9190.  add.w a4,d3
  9191.  addx.l d6,d5
  9192.  move.w (a1,d0.w*2),(a3)
  9193.  addq #4,a3
  9194.  dbcs d7,acrossscrn
  9195.  dbcc d7,backbefore
  9196.  bra.s past1
  9197.  
  9198. acrossscrn:
  9199.  and.w d1,d5
  9200.  move.b (a0,d5.w*4),d0
  9201.  add.w a4,d3
  9202.  addx.l d2,d5
  9203.  move.w (a1,d0.w*2),(a3)
  9204.  addq #4,a3
  9205.  dbcs d7,acrossscrn
  9206.  dbcc d7,backbefore
  9207. past1:
  9208.  bcc.s gotoacross
  9209.  
  9210.  move.w d4,d7
  9211.  bne.s .notdoneyet
  9212.  rts
  9213. .notdoneyet:
  9214.  
  9215.  cmp.w #32,d7
  9216.  ble.s .notoowide
  9217.  move.w #32,d7
  9218. .notoowide
  9219.  sub.w d7,d4  
  9220.  addq #4,a3
  9221.  
  9222.  dbra d7,backbefore
  9223.  rts
  9224.  
  9225.  
  9226. gotoacross:
  9227.  
  9228.  move.w d4,d7
  9229.  bne.s .notdoneyet
  9230.  rts
  9231. .notdoneyet:
  9232.  
  9233.  cmp.w #32,d7
  9234.  ble.s .notoowide
  9235.  move.w #32,d7
  9236. .notoowide
  9237.  sub.w d7,d4  
  9238.  addq #4,a3
  9239.  
  9240.  dbra d7,acrossscrn
  9241.  rts
  9242.  
  9243. leftbright: dc.l 0
  9244. brightspd: dc.l 0
  9245.  
  9246. FIRSTLEN: dc.w 0
  9247. SECLEN: dc.w 0
  9248. THIRDLEN: dc.w 0
  9249.  
  9250. gouraudfloor:
  9251.  
  9252.  move.w leftbright,d0
  9253.  move.l d1,d4
  9254.  move.w brightspd,d1
  9255.  
  9256.  
  9257.  move.w FIRSTLEN,d7
  9258.  bsr dgf
  9259.  move.w SECLEN,d7
  9260.  beq.s .don
  9261.  addq #4,a3
  9262.  bsr dgf
  9263.  move.w THIRDLEN,d7
  9264.  beq.s .don
  9265.  addq #4,a3
  9266.  bra dgf
  9267.  
  9268. .don:
  9269.  rts
  9270.  
  9271. dgf:
  9272.  move.w d7,d3
  9273.  asr.w #1,d7
  9274.  btst #0,d3
  9275.  beq.s .nosingle1
  9276.  move.w d5,d3
  9277.  move.l d5,d6
  9278.  lsr.w #8,d3
  9279.  swap d6
  9280.  move.b d3,d6
  9281.  move.w d0,d3
  9282.  ifeq CHEESEY
  9283.  move.b (a0,d6.w*4),d3
  9284.  endc
  9285.  ifne CHEESEY
  9286.  move.b (a0,d6.w),d3
  9287.  endc
  9288.  
  9289.  add.w d1,d0
  9290.  add.l d2,d5
  9291.  and.l d4,d5
  9292.  move.w (a1,d3.w*2),(a3)
  9293.  addq #4,a3
  9294. .nosingle1
  9295.  
  9296.  move.w d7,d3
  9297.  asr.w #1,d7
  9298.  btst #0,d3
  9299.  beq.s .nosingle2
  9300.  move.w d5,d3
  9301.  move.l d5,d6
  9302.  lsr.w #8,d3
  9303.  swap d6
  9304.  move.b d3,d6
  9305.  move.w d0,d3
  9306.  ifeq CHEESEY
  9307.  move.b (a0,d6.w*4),d3
  9308.  endc
  9309.  ifne CHEESEY
  9310.  move.b (a0,d6.w),d3
  9311.  endc
  9312.  add.w d1,d0
  9313.  add.l d2,d5
  9314.  and.l d4,d5
  9315.  move.l d5,d6
  9316.  swap d6
  9317.  move.w (a1,d3.w*2),(a3)
  9318.  addq #4,a3
  9319.  move.w d5,d3
  9320.  lsr.w #8,d3
  9321.  move.b d3,d6
  9322.  move.w d0,d3
  9323.  ifeq CHEESEY
  9324.  move.b (a0,d6.w*4),d3
  9325.  endc
  9326.  ifne CHEESEY
  9327.  move.b (a0,d6.w),d3
  9328.  endc
  9329.  add.w d1,d0
  9330.  add.l d2,d5
  9331.  and.l d4,d5
  9332.  move.w (a1,d3.w*2),(a3)
  9333.  addq #4,a3
  9334.  
  9335. .nosingle2
  9336.  
  9337.  move.l d5,d6
  9338.  swap d6
  9339.  
  9340.  dbra d7,acrossscrngour
  9341.  rts
  9342.  
  9343.  CNOP 0,4
  9344.  
  9345. acrossscrngour:
  9346.  move.w d5,d3
  9347.  lsr.w #8,d3
  9348.  move.b d3,d6
  9349.  move.w d0,d3
  9350.  ifeq CHEESEY
  9351.  move.b (a0,d6.w*4),d3
  9352.  endc
  9353.  ifne CHEESEY
  9354.  move.b (a0,d6.w),d3
  9355.  endc
  9356.  add.w d1,d0
  9357.  add.l d2,d5
  9358.  and.l d4,d5
  9359.  move.l d5,d6
  9360.  swap d6
  9361.  move.b (a1,d3.w),(a3)
  9362.  addq #4,a3
  9363.  move.w d5,d3
  9364.  lsr.w #8,d3
  9365.  move.b d3,d6
  9366.  move.w d0,d3
  9367.  ifeq CHEESEY
  9368.  move.b (a0,d6.w*4),d3
  9369.  endc
  9370.  ifne CHEESEY
  9371.  move.b (a0,d6.w),d3
  9372.  endc
  9373.  add.w d1,d0
  9374.  add.l d2,d5
  9375.  and.l d4,d5
  9376.  move.l d5,d6
  9377.  swap d6
  9378.  move.b (a1,d3.w),(a3)
  9379.  addq #4,a3
  9380.  move.w d5,d3
  9381.  lsr.w #8,d3
  9382.  move.b d3,d6
  9383.  move.w d0,d3
  9384.  ifeq CHEESEY
  9385.  move.b (a0,d6.w*4),d3
  9386.  endc
  9387.  ifne CHEESEY
  9388.  move.b (a0,d6.w),d3
  9389.  endc
  9390.  add.w d1,d0
  9391.  add.l d2,d5
  9392.  and.l d4,d5
  9393.  move.l d5,d6
  9394.  swap d6
  9395.  move.b (a1,d3.w),(a3)
  9396.  addq #4,a3
  9397.  move.w d5,d3
  9398.  lsr.w #8,d3
  9399.  move.b d3,d6
  9400.  move.w d0,d3
  9401.  ifeq CHEESEY
  9402.  move.b (a0,d6.w*4),d3
  9403.  endc
  9404.  ifne CHEESEY
  9405.  move.b (a0,d6.w),d3
  9406.  endc
  9407.  add.w d1,d0
  9408.  add.l d2,d5
  9409.  and.l d4,d5
  9410.  move.l d5,d6
  9411.  swap d6
  9412.  move.b (a1,d3.w),(a3)
  9413.  addq #4,a3
  9414.  dbra d7,acrossscrngour
  9415.  
  9416.  rts
  9417.  
  9418.  
  9419. gouraudfloorDOUB:
  9420.  
  9421.  move.w leftbright,d0
  9422.  move.l d1,d4
  9423.  move.w brightspd,d1
  9424.  add.w d1,d1
  9425.  add.l d2,d2
  9426.  
  9427.  
  9428. ; move.l frompt,a3
  9429.  
  9430.  move.w FIRSTLEN,d7
  9431.  bsr dgfD
  9432.  move.w SECLEN,d7
  9433.  beq.s .don
  9434.  addq #4,a3
  9435.  bsr dgfD
  9436.  move.w THIRDLEN,d7
  9437.  beq.s .don
  9438.  addq #4,a3
  9439.  bra dgfD
  9440.  
  9441. .don:
  9442.  rts
  9443.  
  9444. dgfD:
  9445.  move.w d7,d3
  9446.  asr.w #1,d7
  9447.  btst #0,d3
  9448.  beq.s .nosingle1
  9449.  move.w d5,d3
  9450.  move.l d5,d6
  9451.  lsr.w #8,d3
  9452.  swap d6
  9453.  move.b d3,d6
  9454.  move.w d0,d3
  9455.  ifeq CHEESEY
  9456.  move.b (a0,d6.w*4),d3
  9457.  endc
  9458.  ifne CHEESEY
  9459.  move.b (a0,d6.w),d3
  9460.  endc
  9461.  add.w d1,d0
  9462.  add.l d2,d5
  9463.  and.l d4,d5
  9464.  move.w (a1,d3.w*2),(a3)
  9465.  addq #4,a3
  9466. .nosingle1
  9467.  
  9468.  move.w d7,d3
  9469.  asr.w #1,d7
  9470.  btst #0,d3
  9471.  beq.s .nosingle2
  9472.  move.w d5,d3
  9473.  move.l d5,d6
  9474.  lsr.w #8,d3
  9475.  swap d6
  9476.  move.b d3,d6
  9477.  move.w d0,d3
  9478.  ifeq CHEESEY
  9479.  move.b (a0,d6.w*4),d3
  9480.  endc
  9481.  ifne CHEESEY
  9482.  move.b (a0,d6.w),d3
  9483.  endc
  9484.  add.w d1,d0
  9485.  add.l d2,d5
  9486.  and.l d4,d5
  9487.  move.l d5,d6
  9488.  swap d6
  9489.  move.w (a1,d3.w*2),(a3)
  9490.  addq #4,a3
  9491.  move.w d5,d3
  9492.  lsr.w #8,d3
  9493.  move.b d3,d6
  9494.  move.w d0,d3
  9495.  ifeq CHEESEY
  9496.  move.b (a0,d6.w*4),d3
  9497.  endc
  9498.  ifne CHEESEY
  9499.  move.b (a0,d6.w),d3
  9500.  endc
  9501.  add.w d1,d0
  9502.  add.l d2,d5
  9503.  and.l d4,d5
  9504.  move.w (a1,d3.w*2),(a3)
  9505.  addq #4,a3
  9506.  
  9507. .nosingle2
  9508.  
  9509.  move.l d5,d6
  9510.  swap d6
  9511.  
  9512.  dbra d7,acrossscrngourD
  9513.  rts
  9514.  
  9515.  CNOP 0,4
  9516.  
  9517. acrossscrngourD:
  9518.  move.w d5,d3
  9519.  lsr.w #8,d3
  9520.  move.b d3,d6
  9521.  move.w d0,d3
  9522.  ifeq CHEESEY
  9523.  move.b (a0,d6.w*4),d3
  9524.  endc
  9525.  ifne CHEESEY
  9526.  move.b (a0,d6.w),d3
  9527.  endc
  9528.  add.w d1,d0
  9529.  add.l d2,d5
  9530.  and.l d4,d5
  9531.  move.l d5,d6
  9532.  swap d6
  9533.  move.w (a1,d3.w*2),(a3)
  9534.  addq #4,a3
  9535.  move.w d5,d3
  9536.  lsr.w #8,d3
  9537.  move.b d3,d6
  9538.  move.w d0,d3
  9539.  ifeq CHEESEY
  9540.  move.b (a0,d6.w*4),d3
  9541.  endc
  9542.  ifne CHEESEY
  9543.  move.b (a0,d6.w),d3
  9544.  endc
  9545.  add.w d1,d0
  9546.  add.l d2,d5
  9547.  and.l d4,d5
  9548.  move.l d5,d6
  9549.  swap d6
  9550.  move.w (a1,d3.w*2),(a3)
  9551.  addq #4,a3
  9552.  move.w d5,d3
  9553.  lsr.w #8,d3
  9554.  move.b d3,d6
  9555.  move.w d0,d3
  9556.  ifeq CHEESEY
  9557.  move.b (a0,d6.w*4),d3
  9558.  endc
  9559.  ifne CHEESEY
  9560.  move.b (a0,d6.w),d3
  9561.  endc
  9562.  add.w d1,d0
  9563.  add.l d2,d5
  9564.  and.l d4,d5
  9565.  move.l d5,d6
  9566.  swap d6
  9567.  move.w (a1,d3.w*2),(a3)
  9568.  addq #4,a3
  9569.  move.w d5,d3
  9570.  lsr.w #8,d3
  9571.  move.b d3,d6
  9572.  move.w d0,d3
  9573.  ifeq CHEESEY
  9574.  move.b (a0,d6.w*4),d3
  9575.  endc
  9576.  ifne CHEESEY
  9577.  move.b (a0,d6.w),d3
  9578.  endc
  9579.  add.w d1,d0
  9580.  add.l d2,d5
  9581.  and.l d4,d5
  9582.  move.l d5,d6
  9583.  swap d6
  9584.  move.w (a1,d3.w*2),(a3)
  9585.  addq #4,a3
  9586.  dbra d7,acrossscrngourD
  9587.  
  9588.  rts
  9589.  
  9590.  
  9591. ;backbeforegour:
  9592. ; and.w #63*256+63,d5
  9593. ; move.b (a0,d5.w*4),d0
  9594. ; add.l d1,d0
  9595. ; bcc.s .nomoreb
  9596. ; add.w #256,d0
  9597. ;.nomoreb:
  9598. ; add.w a4,d3
  9599. ; move.w (a1,d0.w*2),(a3)+
  9600. ; addx.l d6,d5
  9601. ; dbcs d7,acrossscrngour
  9602. ; dbcc d7,backbeforegour
  9603. ; rts
  9604. ; bra.s past1gour
  9605.  
  9606. ;acrossscrngour:
  9607. ; and.l #$3f3f,d5 
  9608. ; move.b (a0,d5.w*4),d0
  9609. ; add.l d1,d0
  9610. ; bcc.s .nomoreb
  9611. ; add.w #256,d0
  9612. ;.nomoreb:
  9613. ; add.w a4,d3
  9614. ; move.w (a1,d0.w*2),(a3)+
  9615. ; addx.l d2,d5
  9616. ; dbcs d7,acrossscrngour
  9617. ; dbcc d7,backbeforegour
  9618. ;past1gour:
  9619. ; rts
  9620.  
  9621.  move.w d4,d7
  9622.  bne.s .notdoneyet
  9623.  move.l d0,leftbright
  9624.  
  9625.  rts
  9626. .notdoneyet:
  9627.  
  9628.  cmp.w #32,d7
  9629.  ble.s .notoowide
  9630.  move.w #32,d7
  9631. .notoowide
  9632.  sub.w d7,d4  
  9633.  addq #4,a3
  9634.  
  9635. ; dbra d7,backbeforegour
  9636.  rts
  9637.  
  9638.  
  9639. gotoacrossgour:
  9640.  
  9641.  move.w d4,d7
  9642.  bne.s .notdoneyet
  9643.  rts
  9644. .notdoneyet:
  9645.  
  9646.  cmp.w #32,d7
  9647.  ble.s .notoowide
  9648.  move.w #32,d7
  9649. .notoowide
  9650.  sub.w d7,d4  
  9651.  addq #4,a3
  9652.  
  9653.  dbra d7,acrossscrngour
  9654.  rts
  9655.  
  9656.  
  9657. waterpt: dc.l waterlist
  9658.  
  9659. waterlist:
  9660.  dc.l waterfile
  9661.  dc.l waterfile+2
  9662.  dc.l waterfile+256
  9663.  dc.l waterfile+256+2
  9664.  dc.l waterfile+512
  9665.  dc.l waterfile+512+2
  9666.  dc.l waterfile+768
  9667.  dc.l waterfile+768+2
  9668. ; dc.l waterfile+768
  9669. ; dc.l waterfile+512+2
  9670. ; dc.l waterfile+512
  9671. ; dc.l waterfile+256+2
  9672. ; dc.l waterfile+256
  9673. ; dc.l waterfile+2
  9674. endwaterlist:
  9675.  
  9676. watertouse: dc.l waterfile
  9677.  
  9678. wtan: dc.w 0
  9679. wateroff: dc.l 0
  9680.  
  9681. REFLECTIONWATER:
  9682.  
  9683.  move.l d1,d4
  9684.  
  9685.  add.l wateroff,d5
  9686.  
  9687.  move.l #brightentab,a1
  9688.  move.l dst,d0
  9689.  clr.b d0
  9690.  
  9691.  add.w d0,d0
  9692.  cmp.w #12*512,d0
  9693.  blt.s .notoowater
  9694.  move.w #12*512,d0
  9695.  
  9696. .notoowater:
  9697.   
  9698.  adda.w d0,a1
  9699.  
  9700.  move.l dst,d0
  9701.  asl.w #7,d0
  9702.  add.w wtan,d0
  9703.  and.w #8191,d0
  9704.  move.l #SineTable,a0
  9705.  move.w (a0,d0.w),d0
  9706.  ext.l d0
  9707.  
  9708.  move.l dst,d3
  9709.  add.w #300,d3
  9710.  divs d3,d0
  9711.  asr.w #5,d0
  9712.  addq #4,d0
  9713.  cmp.w disttobot,d0
  9714.  blt.s oknotoffbotototr
  9715.  
  9716.  move.w disttobot,d0
  9717.  subq #1,d0
  9718.  
  9719. oknotoffbotototr
  9720.  
  9721. ; move.w dst,d3
  9722. ; asr.w #7,d3
  9723. ; add.w d3,d0
  9724.  
  9725.  muls #320,d0
  9726.  tst.w above
  9727.  beq.s nonnnnnegr
  9728.  neg.l d0
  9729.  
  9730. nonnnnnegr:
  9731.  
  9732.  move.l d0,a6
  9733.  
  9734.  move.l watertouse,a0
  9735.  
  9736. ; move.l #mixtab,a5
  9737.  
  9738.  moveq #0,d1
  9739.  
  9740.  move.w startsmoothx,d3
  9741.  dbra d7,acrossscrnwr
  9742.  rts
  9743.  
  9744. backbeforewr:
  9745.  and.w d1,d5 
  9746.  move.w (a0,d5.w*4),d0
  9747.  move.b (a3,a6.w),d0
  9748.  move.w (a1,d0.w),(a3)+
  9749.  add.w a4,d3
  9750.  addx.l d6,d5
  9751.  dbcs d7,acrossscrnwr
  9752.  dbcc d7,backbeforewr
  9753.  rts
  9754.  
  9755. acrossscrnwr:
  9756.  move.w d5,d3
  9757.  move.l d5,d6
  9758.  lsr.w #8,d3
  9759.  swap d6
  9760.  move.b d3,d6
  9761.  move.w (a0,d6.w*4),d0
  9762.  add.l d2,d5
  9763.  move.w (a4,a6.w),d1
  9764.  addq #2,a4
  9765.  move.b (a3,a6.w),d1
  9766.  move.b (a5,d1.l),d0
  9767.  and.l d4,d5
  9768.  move.w (a1,d0.w),(a3)+
  9769.  dbra d7,acrossscrnwr
  9770.  rts
  9771.  
  9772. texturedwater:
  9773.  
  9774.  move.l d1,d4
  9775.  
  9776.  add.l wateroff,d5
  9777.  
  9778.  move.l #brightentab,a1
  9779.  move.l dst,d0
  9780.  asr.l #1,d0
  9781.  clr.b d0
  9782.  
  9783.  add.w d0,d0
  9784.  cmp.w #9*512,d0
  9785.  blt.s .notoowater
  9786.  move.w #9*512,d0
  9787. .notoowater:
  9788.   
  9789.  adda.w d0,a1
  9790.  
  9791.  move.l dst,d0
  9792.  asl.w #7,d0
  9793.  add.w wtan,d0
  9794.  and.w #8191,d0
  9795.  move.l #SineTable,a0
  9796.  move.w (a0,d0.w),d0
  9797.  ext.l d0
  9798.  
  9799.  move.l dst,d3
  9800.  add.w #300,d3
  9801.  divs d3,d0
  9802.  asr.w #5,d0
  9803.  addq #4,d0
  9804.  cmp.w disttobot,d0
  9805.  blt.s oknotoffbototot
  9806.  
  9807.  move.w disttobot,d0
  9808.  subq #1,d0
  9809.  
  9810. oknotoffbototot
  9811.  
  9812. ; move.w dst,d3
  9813. ; asr.w #7,d3
  9814. ; add.w d3,d0
  9815.  
  9816. ; tst.b DOUBLEHEIGHT
  9817. ; beq.s .nodoub
  9818. ; and.b #$fe,d0
  9819. ;.nodoub:
  9820.  
  9821.  asr.w #1,d0
  9822.  
  9823.  muls #104*4,d0
  9824.  tst.w above
  9825.  beq.s nonnnnneg
  9826.  neg.l d0
  9827.  
  9828. nonnnnneg:
  9829.  
  9830.  move.l d0,a6
  9831.  
  9832.  move.l watertouse,a0
  9833.  
  9834.  move.w startsmoothx,d3
  9835.  
  9836.  move.w FIRSTLEN,d7
  9837.  bsr startwater
  9838.  move.w SECLEN,d7
  9839.  beq.s .endwater
  9840.  addq #4,a3
  9841.  bsr startwater
  9842.  addq #4,a3
  9843.  move.w THIRDLEN,d7
  9844.  bne.s startwater
  9845.  
  9846. .endwater:
  9847.  rts
  9848.  
  9849.  
  9850. startwater:
  9851.  
  9852.  dbra d7,acrossscrnw
  9853.  rts
  9854.  
  9855. backbeforew:
  9856.  and.w d1,d5
  9857.  move.w (a0,d5.w*4),d0
  9858.  move.b 1(a3,a6.w),d0
  9859.  move.w (a1,d0.w*2),(a3)
  9860.  addq #4,a3
  9861.  add.w a4,d3
  9862.  addx.l d6,d5
  9863.  dbcs d7,acrossscrnw
  9864.  dbcc d7,backbeforew
  9865.  rts
  9866.  
  9867. acrossscrnw:
  9868.  move.w d5,d3
  9869.  move.l d5,d6
  9870.  lsr.w #8,d3
  9871.  swap d6
  9872.  move.b d3,d6
  9873.  move.w (a0,d6.w*4),d0
  9874.  add.l d2,d5
  9875.  move.b 1(a3,a6.w),d0
  9876.  and.l d4,d5
  9877.  move.w (a1,d0.w),(a3)
  9878.  addq #4,a3
  9879.  dbra d7,acrossscrnw
  9880.  rts
  9881.  
  9882.  
  9883. texturedwaterDOUB:
  9884.  
  9885.  move.l d1,d4
  9886.  
  9887.  add.l wateroff,d5
  9888.  
  9889.  move.l #brightentab,a1
  9890.  move.l dst,d0
  9891.  asr.l #1,d0
  9892.  clr.b d0
  9893.  
  9894.  add.w d0,d0
  9895.  cmp.w #9*512,d0
  9896.  blt.s .notoowater
  9897.  move.w #9*512,d0
  9898. .notoowater:
  9899.   
  9900.  adda.w d0,a1
  9901.  
  9902.  move.l dst,d0
  9903.  asl.w #7,d0
  9904.  add.w wtan,d0
  9905.  and.w #8191,d0
  9906.  move.l #SineTable,a0
  9907.  move.w (a0,d0.w),d0
  9908.  ext.l d0
  9909.  
  9910.  move.l dst,d3
  9911.  add.w #300,d3
  9912.  divs d3,d0
  9913.  asr.w #5,d0
  9914.  addq #4,d0
  9915.  cmp.w disttobot,d0
  9916.  blt.s .oknotoffbototot
  9917.  
  9918.  move.w disttobot,d0
  9919.  subq #1,d0
  9920.  
  9921. .oknotoffbototot
  9922.  
  9923. ; move.w dst,d3
  9924. ; asr.w #7,d3
  9925. ; add.w d3,d0
  9926.  
  9927.  tst.b DOUBLEHEIGHT
  9928.  beq.s .nodoub
  9929.  and.b #$fe,d0
  9930. .nodoub:
  9931.  
  9932.  muls #320,d0
  9933.  tst.w above
  9934.  beq.s .nonnnnneg
  9935.  neg.l d0
  9936.  
  9937. .nonnnnneg:
  9938.  
  9939.  move.l d0,a6
  9940.  
  9941.  move.l watertouse,a0
  9942.  
  9943.  add.l d2,d2
  9944.  
  9945.  move.w startsmoothx,d3
  9946.  dbra d7,acrossscrnwD
  9947.  rts
  9948.  
  9949.  
  9950. acrossscrnwD:
  9951.  move.w d5,d3
  9952.  move.l d5,d6
  9953.  lsr.w #8,d3
  9954.  swap d6
  9955.  move.b d3,d6
  9956.  move.w (a0,d6.w*4),d0
  9957.  add.l d2,d5
  9958.  move.b (a3,a6.w),d0
  9959.  and.l d4,d5
  9960.  move.w (a1,d0.w),(a3)+
  9961.  dbra d7,acrossscrnwD
  9962.  rts
  9963.  
  9964.  
  9965. usewater: dc.w 0
  9966.  dc.w 0
  9967. startsmoothx: dc.w 0
  9968.  dc.w 0
  9969. startsmoothz: dc.w 0
  9970.  
  9971. ********************************
  9972. *
  9973.  include "AB3:CHEESESAUCE/ObjDrawHIRES.s"
  9974. *
  9975. ********************************
  9976.  
  9977. numframes:
  9978.  dc.w 0
  9979.  
  9980. alframe: dc.l 0
  9981.  
  9982. alan:
  9983.  dcb.l 8,0
  9984.  dcb.l 8,1
  9985.  dcb.l 8,2
  9986.  dcb.l 8,3
  9987. endalan:
  9988.  
  9989. alanptr: dc.l alan
  9990.  
  9991. Time2: dc.l 0
  9992. dispco:
  9993.  dc.w 0
  9994.  
  9995.  
  9996. key_interrupt:
  9997.         movem.l    d0-d7/a0-a6,-(sp)
  9998.  
  9999. ;        move.w    INTREQR,d0
  10000. ;        btst    #3,d0
  10001. ;        beq    .not_key
  10002.  
  10003.         move.b    $bfdd00,d0
  10004.         btst    #0,d0
  10005.         bne    .key_cont
  10006. ;        move.b    $bfed01,d0
  10007. ;        btst    #0,d0
  10008. ;        bne    .key_cont
  10009.     
  10010. ;        btst    #3,d0
  10011. ;        beq    .key_cont
  10012.  
  10013.         move.b    $bfec01,d0
  10014.         clr.b    $bfec01
  10015.  
  10016.         tst.b    d0
  10017.         beq    .key_cont
  10018.  
  10019. ;        bset    #6,$bfee01
  10020. ;        move.b    #$f0,$bfe401
  10021. ;        move.b    #$00,$bfe501
  10022. ;        bset    #0,$bfee01
  10023.  
  10024.  
  10025.         not.b    d0
  10026.         ror.b    #1,d0
  10027.         lea.l    KeyMap,a0
  10028.         tst.b    d0
  10029.         bmi.b    .key_up
  10030.         and.w    #$7f,d0
  10031. ;        add.w    #1,d0
  10032.         move.b    #$ff,(a0,d0.w)
  10033.         move.b    d0,lastpressed
  10034.  
  10035.         bra.b    .key_cont2
  10036. .key_up:
  10037.         and.w    #$7f,d0
  10038. ;        add.w    #1,d0
  10039.         move.b    #$00,(a0,d0.w)
  10040.  
  10041. .key_cont2
  10042. ;        btst    #0,$bfed01
  10043. ;        beq    .key_cont2
  10044. ;        move.b    #%00000000,$bfee01
  10045. ;        move.b    #%10001000,$bfed01
  10046.  
  10047. ;alt keys should not be independent so overlay ralt on lalt
  10048.  
  10049.         
  10050. .key_cont
  10051.  
  10052. ;        move.w    #$0008,INTREQ
  10053. .not_key:    ;lea.l    $dff000,a5
  10054.  
  10055. ;        lea.l    _keypressed(pc),a0
  10056. ;        move.b    101(a0),d0    ;read LALT
  10057. ;        or.b    102(a0),d0    ;blend it with RALT
  10058. ;        move.b    d0,127(a0)    ;save in combined position
  10059.  
  10060.         movem.l    (sp)+,d0-d7/a0-a6
  10061.  
  10062.         rts
  10063.  
  10064. lastpressed:    dc.b 0
  10065. KInt_CCode    Ds.b    1
  10066. KInt_Askey    Ds.b    1
  10067. KInt_OCode    Ds.w    1
  10068.  
  10069.  
  10070. OldSpace: dc.b 0
  10071. SpaceTapped: dc.b 0
  10072. PLR1_SPCTAP: dc.b 0
  10073. PLR2_SPCTAP: dc.b 0
  10074. PLR1_Ducked: dc.b 0
  10075. PLR2_Ducked: dc.b 0
  10076.  even
  10077.  
  10078.  include "ab3:CHEESESAUCE/PLR1CONTROL.s"
  10079.  include "ab3:CHEESESAUCE/PLR2CONTROL.s"
  10080.  include "ab3:CHEESESAUCE/FALL.s"
  10081.  
  10082. prot7: dc.w 0
  10083.  
  10084. GOTTOSEND: dc.w 0
  10085.  
  10086. OtherInter:
  10087.  move.w #$0010,$dff000+intreq
  10088.  movem.l d0-d7/a0-a6,-(a7)
  10089.  bra justshake
  10090.  
  10091.     cnop 0,4
  10092.  
  10093. Chan0inter:
  10094.  
  10095.     SAVEREGS
  10096.     jsr    .routine
  10097.     GETREGS
  10098.  
  10099. ;    move.w    #1024+'.',$dff030
  10100.     
  10101.     moveq #1,d0
  10102.     rts
  10103.  
  10104. .routine
  10105.  
  10106.     
  10107. ;w move.w #$0010,$dff000+intreq
  10108.  
  10109.  tst.b doanything
  10110.  bne dosomething
  10111.  
  10112.  movem.l d0-d7/a0-a6,-(a7)
  10113.  bra JUSTSOUNDS
  10114.  
  10115.  rts
  10116.  
  10117. tabheld: dc.w 0
  10118. ObjWork: ds.l 512
  10119. WORKPTR: dc.l 0
  10120. thistime: dc.w 0
  10121.  
  10122. DOALLANIMS:
  10123.  
  10124.  sub.b #1,thistime
  10125.  ble.s .okdosome
  10126.  rts
  10127.  
  10128. .okdosome:
  10129.  move.b #5,thistime
  10130.  
  10131.  
  10132.  move.l #ObjWork,a5
  10133.  move.l ObjectData,a0
  10134. Objectloop2:
  10135.  tst.w (a0)
  10136.  blt doneallobj2
  10137.  move.w 12(a0),d0
  10138.  blt doneobj2
  10139.  move.w d0,GraphicRoom(a0)
  10140.  tst.b worry(a0)
  10141.  beq.s doneobj2
  10142.  
  10143.  move.b 16(a0),d0
  10144.  cmp.b #1,d0
  10145.  blt JUMPALIENANIM
  10146. ; beq JUMPOBJECTANIM
  10147. ; cmp.b #2,d0
  10148. ; beq JUMPBULLET
  10149.  
  10150. doneobj2:
  10151.  
  10152.  adda.w #64,a0
  10153.  addq #8,a5
  10154.  bra Objectloop2
  10155.  
  10156. doneallobj2:
  10157.  rts
  10158.  
  10159. JUMPALIENANIM:
  10160.  
  10161.  moveq #0,d0
  10162.  move.b WhichAnim(a0),d0
  10163. ; 0=walking
  10164. ; 1=attacking
  10165. ; 2=getting hit
  10166. ; 3=dying
  10167.  
  10168.  cmp.b #1,d0
  10169.  blt.s ALWALK
  10170.  beq.s ALATTACK
  10171.  
  10172.  cmp.b #3,d0
  10173.  blt ALGETHIT
  10174.  beq ALDIE
  10175.  
  10176.  bra doneobj2
  10177.  
  10178. ALDIE
  10179.  move.l #10,d0
  10180.  bra intowalk
  10181.  
  10182. ALGETHIT:
  10183.  move.l #9,d0
  10184.  bra intowalk
  10185.  
  10186. ALATTACK:
  10187.  move.l #8,d0
  10188.  bra intowalk
  10189.  
  10190. AUXOBJ: dc.w 0
  10191.  
  10192. ALWALK:
  10193.  
  10194. ; jsr ViewpointToDraw
  10195. ; add.l d0,d0
  10196. ; move.l LINKFILE,a6
  10197. ; add.l #AlienStats,a6
  10198. ; moveq #0,d1
  10199. ; move.b TypeOfThing(a0),d1
  10200. ; muls #AlienStatLen,d1
  10201. ; add.l d1,a6
  10202. ; cmp.w #1,A_GFXType(a6)
  10203. ; bne.s NOSIDES2
  10204.  
  10205.  moveq #0,d0
  10206. intowalk:
  10207.  
  10208. NOSIDES2:
  10209.  
  10210.  move.b d0,2(a5)
  10211.  move.l LINKFILE,a6
  10212.  
  10213.  add.l #AlienAnimData,a6
  10214.  
  10215.  moveq #0,d1
  10216.  move.b TypeOfThing(a0),d1
  10217.  move.w .valtables+4(pc,d1.w*8),d1
  10218.  ext.l d1
  10219. ; muls #A_AnimLen,d1
  10220.  add.l d1,a6
  10221.  
  10222. ; move.l ANIMPOINTER,a6
  10223.  
  10224. ; muls #A_OptLen,d0
  10225.  move.w .valtables+2(pc,d0.w*8),d0
  10226.  add.w d0,a6
  10227.  
  10228.  move.w SecTimer(a0),d1
  10229.  move.w d1,d2
  10230. ; muls #A_FrameLen,d1
  10231.  move.w .valtables(pc,d1.w*8),d1
  10232.  
  10233.  moveq #0,d0
  10234.  move.b 5(a6,d1.w),d0
  10235.  beq.s .nosoundmake
  10236.  
  10237.  movem.l d0-d7/a0-a6,-(a7)
  10238.  subq #1,d0
  10239.  move.w d0,Samplenum
  10240.  clr.b notifplaying
  10241.  move.b 1(a0),IDNUM
  10242.  move.w #80,Noisevol
  10243.  move.l #ObjRotated,a1
  10244.  move.w (a0),d0
  10245.  lea (a1,d0.w*8),a1
  10246.  move.l (a1),Noisex
  10247.  jsr MakeSomeNoise
  10248.  movem.l (a7)+,d0-d7/a0-a6
  10249. .nosoundmake
  10250.  
  10251.  move.b 6(a6,d1.w),d0
  10252.  beq.s .noaction
  10253.  add.b #1,(a5)
  10254.  move.b d2,1(a5)
  10255. .noaction
  10256.  
  10257.  addq #1,d2
  10258.  
  10259.  moveq #0,d0
  10260.  move.b 7(a6,d1.w),d0
  10261.  beq .nospecial
  10262.  bra .special
  10263.  
  10264. .valtables:
  10265. val SET 0
  10266.  REPT 20
  10267.  dc.w A_FrameLen*val,A_OptLen*val
  10268.  dc.w A_AnimLen*val,0
  10269. val SET val+1
  10270.  ENDR
  10271.  
  10272. .special
  10273.  move.b d0,d3
  10274.  and.w #63,d3
  10275.  lsr.w #6,d0
  10276.  cmp.w #2,d0
  10277.  blt.s .storeval
  10278.  beq.s .randval
  10279.  
  10280.  sub.b #1,4(a5)
  10281.  beq.s .nospecial
  10282.  
  10283.  move.w d3,d2
  10284.  bra.s .nospecial
  10285.  
  10286. .randval:
  10287.  jsr GetRand
  10288.  divs d3,d0
  10289.  swap d0
  10290.  move.w d0,d3
  10291.  
  10292. .storeval:
  10293.  move.b d3,4(a5)
  10294. .nospecial:
  10295.  
  10296. ; move.w d2,d3
  10297.  move.w .valtables2(pc,d2.w*8),d3
  10298. ; muls #A_FrameLen,d3
  10299.  tst.b (a6,d3.w)
  10300.  bge.s .noendanim
  10301.  st 3(a5)
  10302.  move.w #0,d2
  10303. .noendanim
  10304.  move.w d2,SecTimer(a0)
  10305.  
  10306.  bra doneobj2
  10307.  
  10308. .valtables2:
  10309. val SET 0
  10310.  REPT 20
  10311.  dc.w A_FrameLen*val,A_OptLen*val
  10312.  dc.w A_AnimLen*val,0
  10313. val SET val+1
  10314.  ENDR
  10315.  
  10316.  
  10317. timetodamage: dc.w 0
  10318. SAVESAVE: dc.w 0
  10319.  
  10320. dosomething:
  10321.  
  10322.  
  10323.  
  10324.  addq.w #1,FramesToDraw
  10325.  movem.l d0-d7/a0-a6,-(a7)
  10326.  
  10327.  jsr NARRATOR
  10328.  
  10329.  bsr DOALLANIMS
  10330.  
  10331.  sub.w #1,timetodamage
  10332.  bgt.s .nodam
  10333.  
  10334.  move.w #100,timetodamage
  10335.  
  10336.  move.l PLR1_Roompt,a0
  10337.  move.w ToFloorNoise(a0),d0
  10338.  tst.b PLR1_StoodInTop
  10339.  beq.s .okinbot
  10340.  move.w ToUpperFloorNoise(a0),d0
  10341. .okinbot:
  10342.  
  10343.  move.l LINKFILE,a0
  10344.  add.l #FloorData,a0
  10345.  move.w (a0,d0.w*4),d0    ; damage. 
  10346.  move.l PLR1_Obj,a0
  10347.  add.b d0,damagetaken(a0)
  10348.  
  10349.  move.l PLR2_Roompt,a0
  10350.  move.w ToFloorNoise(a0),d0
  10351.  tst.b PLR2_StoodInTop
  10352.  beq.s .okinbot2
  10353.  move.w ToUpperFloorNoise(a0),d0
  10354. .okinbot2:
  10355.  
  10356.  move.l LINKFILE,a0
  10357.  add.l #FloorData,a0
  10358.  move.w (a0,d0.w*4),d0    ; damage. 
  10359.  
  10360.  move.l PLR2_Obj,a0
  10361.  add.b d0,damagetaken(a0)
  10362.  
  10363. .nodam:
  10364.  
  10365.  move.l #KeyMap,a5
  10366.  
  10367.  tst.b $42(a5)
  10368.  bne.s .tabprsd
  10369.  clr.b tabheld
  10370.  bra.s .noswitch
  10371.  
  10372. .tabprsd:
  10373.  tst.b tabheld
  10374.  bne.s .noswitch
  10375.  not.b MAPON
  10376.  st tabheld
  10377. .noswitch
  10378.  
  10379.  tst.b $3e(a5)
  10380.  sne d0
  10381.  tst.b $1e(a5)
  10382.  sne d1
  10383.  tst.b $2d(a5)
  10384.  sne d2
  10385.  tst.b $2f(a5)
  10386.  sne d3
  10387.  
  10388.  tst.b $3d(a5)
  10389.  sne d4
  10390.  tst.b $3f(a5)
  10391.  sne d5
  10392.  tst.b $1d(a5)
  10393.  sne d6
  10394.  tst.b $1f(a5)
  10395.  sne d7
  10396.  
  10397.  or.b d4,d0
  10398.  or.b d5,d0
  10399.  or.b d6,d1
  10400.  or.b d7,d1
  10401.  or.b d4,d2
  10402.  or.b d6,d2
  10403.  or.b d7,d3
  10404.  or.b d5,d3
  10405.  
  10406.  move.w MAPBRIGHT,d4
  10407.  add.w #2,d4
  10408.  clr.l d5
  10409.  bset d4,d5
  10410.  
  10411.  tst.b d0
  10412.  beq.s .nomapup
  10413.  sub.w d5,mapzoff
  10414. .nomapup 
  10415.  
  10416.  tst.b d1
  10417.  beq.s .nomapdown
  10418.  add.w d5,mapzoff
  10419. .nomapdown 
  10420.  
  10421.  tst.b d2
  10422.  beq.s .nomapleft
  10423.  add.w d5,mapxoff
  10424. .nomapleft 
  10425.  
  10426.  tst.b d3
  10427.  beq.s .nomapright
  10428.  sub.w d5,mapxoff
  10429. .nomapright 
  10430.  
  10431.  tst.b $2e(a5)
  10432.  beq.s .nomapcentre
  10433.  
  10434.  move.w #0,mapxoff
  10435.  move.w #0,mapzoff
  10436.  
  10437. .nomapcentre
  10438.  
  10439. ; move.w STOPOFFSET,d0
  10440. ; tst.b 27(a5)
  10441. ; beq.s .nolookup
  10442. ; sub.w #5,d0
  10443. ; cmp.w #-80,d0
  10444. ; bgt.s .nolookup
  10445. ; move.w #-80,d0
  10446. ;.nolookup:
  10447. ; tst.b 42(a5)
  10448. ; beq.s .nolookdown
  10449. ; add.w #5,d0
  10450. ; cmp.w #80,d0
  10451. ; blt.s .nolookdown
  10452. ; move.w #80,d0
  10453. ;.nolookdown:
  10454. ;
  10455. ; move.w d0,STOPOFFSET
  10456. ; neg.w d0
  10457. ; add.w #120,d0
  10458. ; move.w d0,SMIDDLEY
  10459. ; muls #320*2,d0
  10460. ; move.l d0,SBIGMIDDLEY
  10461.  
  10462.  
  10463. ; jsr INITREC
  10464. ; jsr RECEIVE
  10465.  
  10466. ; tst.l BUFFER
  10467. ; beq.s justshake
  10468. ; st GOTTOSEND
  10469. ; move.l #OtherInter,$6c
  10470.  
  10471. justshake:
  10472.  
  10473.  cmp.b #'b',Prefsfile+3
  10474.  bne.s .noback
  10475.  jsr mt_music
  10476. .noback:
  10477.  
  10478.  bra dontshowtime
  10479.  
  10480.  tst.b oktodisplay
  10481.  beq dontshowtime
  10482.  clr.b oktodisplay
  10483.  subq.w #1,dispco
  10484.  bgt dontshowtime
  10485.  move.w #10,dispco
  10486.  
  10487.  move.l #TimerScr+10,a0
  10488.  move.l TimeCount,d0
  10489.  bge.s timenotneg
  10490.  move.l #1111*256,d0
  10491. timenotneg:
  10492.  asr.l #8,d0
  10493.  move.l #digits,a1
  10494.  move.w #7,d2
  10495. digitlop
  10496.  divs #10,d0
  10497.  swap d0
  10498.  lea (a1,d0.w*8),a2
  10499.  move.b (a2)+,(a0)
  10500.  move.b (a2)+,24(a0)
  10501.  move.b (a2)+,24*2(a0)
  10502.  move.b (a2)+,24*3(a0)
  10503.  move.b (a2)+,24*4(a0)
  10504.  move.b (a2)+,24*5(a0)
  10505.  move.b (a2)+,24*6(a0)
  10506.  move.b (a2)+,24*7(a0)
  10507.  subq #1,a0
  10508.  swap d0
  10509.  ext.l d0
  10510.  dbra d2,digitlop
  10511.  
  10512.  move.l #TimerScr+10+24*10,a0
  10513.  move.l NumTimes,d0
  10514.  move.l #digits,a1
  10515.  move.w #3,d2
  10516. digitlop2
  10517.  divs #10,d0
  10518.  swap d0
  10519.  lea (a1,d0.w*8),a2
  10520.  move.b (a2)+,(a0)
  10521.  move.b (a2)+,24(a0)
  10522.  move.b (a2)+,24*2(a0)
  10523.  move.b (a2)+,24*3(a0)
  10524.  move.b (a2)+,24*4(a0)
  10525.  move.b (a2)+,24*5(a0)
  10526.  move.b (a2)+,24*6(a0)
  10527.  move.b (a2)+,24*7(a0)
  10528.  subq #1,a0
  10529.  swap d0
  10530.  ext.l d0
  10531.  dbra d2,digitlop2
  10532.  
  10533.  move.l #TimerScr+10+24*20,a0
  10534.  moveq #0,d0
  10535.  move.w FramesToDraw,d0
  10536.  move.l #digits,a1
  10537.  move.w #2,d2
  10538. digitlop3
  10539.  divs #10,d0
  10540.  swap d0
  10541.  lea (a1,d0.w*8),a2
  10542.  move.b (a2)+,(a0)
  10543.  move.b (a2)+,24(a0)
  10544.  move.b (a2)+,24*2(a0)
  10545.  move.b (a2)+,24*3(a0)
  10546.  move.b (a2)+,24*4(a0)
  10547.  move.b (a2)+,24*5(a0)
  10548.  move.b (a2)+,24*6(a0)
  10549.  move.b (a2)+,24*7(a0)
  10550.  subq #1,a0
  10551.  swap d0
  10552.  ext.l d0
  10553.  dbra d2,digitlop3
  10554.  
  10555. dontshowtime:
  10556.  
  10557.  
  10558.  move.l alanptr,a0
  10559.  move.l (a0)+,alframe
  10560.  cmp.l #endalan,a0
  10561.  blt.s nostartalan
  10562.  move.l #alan,a0
  10563. nostartalan:
  10564.  move.l a0,alanptr
  10565.  
  10566.  
  10567.  tst.b READCONTROLS
  10568.  beq nocontrols
  10569.  
  10570.  cmp.b #'s',mors
  10571.  beq control2
  10572.  
  10573.  tst.w PLAYERONEHEALTH
  10574.  bgt .propercontrol
  10575.  
  10576.  move.w #$f00,hitcol2
  10577.  move.w #$f00,hitcol
  10578.  move.l #PLR1_Obj,a0
  10579.  move.w #-1,12+128(a0)
  10580.  
  10581.  clr.b PLR1_fire
  10582.  clr.b PLR1_clicked
  10583.  move.w #0,ADDTOBOBBLE
  10584.  move.l #playercrouched,PLR1s_height
  10585.  move.w #-80,d0
  10586.  move.w d0,STOPOFFSET
  10587.  neg.w d0
  10588.  add.w TOTHEMIDDLE,d0
  10589.  move.w d0,SMIDDLEY
  10590.  asr.w #1,d0
  10591.  muls #104*4,d0
  10592.  move.l d0,SBIGMIDDLEY
  10593.  jsr PLR1_fall
  10594.  
  10595.  move.l PLR1s_xspdval,d6
  10596.  move.l PLR1s_zspdval,d7
  10597.  
  10598.  tst.b SLOWDOWN
  10599.  beq.s .nofriction
  10600.  
  10601.  neg.l d6
  10602.  ble.s .nobug1
  10603.  asr.l #3,d6
  10604.  add.l #1,d6
  10605.  bra.s .bug1
  10606. .nobug1
  10607.  asr.l #3,d6
  10608. .bug1:
  10609.  
  10610.  neg.l d7
  10611.  ble.s .nobug2
  10612.  asr.l #3,d7
  10613.  add.l #1,d7
  10614.  bra.s .bug2
  10615. .nobug2
  10616.  asr.l #3,d7
  10617. .bug2: 
  10618.  
  10619.  add.l d6,PLR1s_xspdval
  10620.  add.l d7,PLR1s_zspdval
  10621.  
  10622. .nofriction:
  10623.  move.l PLR1s_xspdval,d6
  10624.  move.l PLR1s_zspdval,d7
  10625.  add.l d6,PLR1s_xoff
  10626.  add.l d7,PLR1s_zoff
  10627.  
  10628.  move.w PLR1s_angspd,d3
  10629.  tst.b SLOWDOWN
  10630.  beq.s .nofric
  10631.  asr.w #2,d3
  10632.  bge.s .nneg
  10633.  addq #1,d3
  10634. .nneg:
  10635. .nofric:
  10636.  
  10637.  move.w d3,PLR1s_angspd
  10638.  add.w d3,PLR1s_angpos
  10639.  add.w d3,PLR1s_angpos
  10640.  and.w #8190,PLR1s_angpos
  10641.  
  10642.  bra nocontrols
  10643.  
  10644. .propercontrol:
  10645.  
  10646.  tst.b PLR1MOUSE
  10647.  beq.s PLR1_nomouse
  10648.  bsr PLR1_mouse_control
  10649. PLR1_nomouse:
  10650.  tst.b PLR1KEYS
  10651.  beq.s PLR1_nokeys
  10652.  bsr PLR1_keyboard_control
  10653. PLR1_nokeys:
  10654. ; tst.b PLR1PATH
  10655. ; beq.s PLR1_nopath
  10656. ; bsr PLR1_follow_path
  10657. ;PLR1_nopath:
  10658.  tst.b PLR1JOY
  10659.  beq.s PLR1_nojoy
  10660.  bsr PLR1_JoyStick_control
  10661. PLR1_nojoy: 
  10662.  bra nocontrols
  10663.  
  10664. control2:
  10665.  
  10666.  tst.w PLAYERTWOHEALTH
  10667.  bgt .propercontrol
  10668.  
  10669.  move.w #$f00,hitcol
  10670.  move.w #$f00,hitcol2
  10671.  move.l #PLR1_Obj,a0
  10672.  move.w #-1,12+128(a0)
  10673.  clr.b PLR2_fire
  10674.  move.w #0,ADDTOBOBBLE
  10675.  move.l #playercrouched,PLR2s_height
  10676.  move.w #-80,d0
  10677.  move.w d0,STOPOFFSET
  10678.  neg.w d0
  10679.  add.w TOTHEMIDDLE,d0
  10680.  move.w d0,SMIDDLEY
  10681.  asr.w #1,d0
  10682.  muls #104*4,d0
  10683.  move.l d0,SBIGMIDDLEY
  10684.  jsr PLR2_fall
  10685.  
  10686.  move.l PLR2s_xspdval,d6
  10687.  move.l PLR2s_zspdval,d7
  10688.  
  10689.  tst.b SLOWDOWN
  10690.  beq.s .nofriction
  10691.  
  10692.  neg.l d6
  10693.  ble.s .nobug1
  10694.  asr.l #3,d6
  10695.  add.l #1,d6
  10696.  bra.s .bug1
  10697. .nobug1
  10698.  asr.l #3,d6
  10699. .bug1:
  10700.  
  10701.  neg.l d7
  10702.  ble.s .nobug2
  10703.  asr.l #3,d7
  10704.  add.l #1,d7
  10705.  bra.s .bug2
  10706. .nobug2
  10707.  asr.l #3,d7
  10708. .bug2: 
  10709.  
  10710.  add.l d6,PLR2s_xspdval
  10711.  add.l d7,PLR2s_zspdval
  10712.  
  10713. .nofriction:
  10714.  move.l PLR2s_xspdval,d6
  10715.  move.l PLR2s_zspdval,d7
  10716.  add.l d6,PLR2s_xoff
  10717.  add.l d7,PLR2s_zoff
  10718.  
  10719.  move.w PLR2s_angspd,d3
  10720.  tst.b SLOWDOWN
  10721.  beq.s .nofric
  10722.  asr.w #2,d3
  10723.  bge.s .nneg
  10724.  addq #1,d3
  10725. .nneg:
  10726. .nofric:
  10727.  
  10728.  move.w d3,PLR2s_angspd
  10729.  add.w d3,PLR2s_angpos
  10730.  add.w d3,PLR2s_angpos
  10731.  and.w #8190,PLR2s_angpos
  10732.  
  10733.  bra.s nocontrols
  10734.  
  10735. .propercontrol:
  10736.  tst.b PLR2MOUSE
  10737.  beq.s PLR2_nomouse
  10738.  bsr PLR2_mouse_control
  10739. PLR2_nomouse:
  10740.  tst.b PLR2KEYS
  10741.  beq.s PLR2_nokeys
  10742.  bsr PLR2_keyboard_control
  10743. PLR2_nokeys:
  10744. ; tst.b PLR2PATH
  10745. ; beq.s PLR2_nopath
  10746. ; bsr PLR1_follow_path
  10747. ;PLR2_nopath:
  10748.  tst.b PLR2JOY
  10749.  beq.s PLR2_nojoy
  10750.  bsr PLR2_JoyStick_control
  10751. PLR2_nojoy: 
  10752.  
  10753.  
  10754. nocontrols:
  10755.  
  10756.  move.l #$dff000,a6
  10757.  
  10758.  cmp.b #'4',Prefsfile+1
  10759.  bne.s nomuckabout
  10760.  
  10761.  move.w #$0,d0 
  10762.  tst.b NoiseMade0LEFT
  10763.  beq.s noturnoff0
  10764.  move.w #1,d0
  10765. noturnoff0:
  10766.  tst.b NoiseMade0RIGHT
  10767.  beq.s noturnoff1
  10768.  or.w #2,d0
  10769. noturnoff1:
  10770.  tst.b NoiseMade1RIGHT
  10771.  beq.s noturnoff2
  10772.  or.w #4,d0
  10773. noturnoff2:
  10774.  tst.b NoiseMade1LEFT
  10775.  beq.s noturnoff3
  10776.  or.w #8,d0
  10777. noturnoff3:
  10778.     move.w d0,dmacon(a6)
  10779.  
  10780. nomuckabout:
  10781.  
  10782.  
  10783. ; tst.b PLR2_fire
  10784. ; beq.s firenotpressed2
  10785. ; fire was pressed last time.
  10786. ; btst #7,$bfe001
  10787. ; bne.s firenownotpressed2
  10788. ; fire is still pressed this time.
  10789. ; st PLR2_fire
  10790. ; bra dointer
  10791.  
  10792. firenownotpressed2:
  10793. ; fire has been released.
  10794. ; clr.b PLR2_fire
  10795. ; bra dointer
  10796.  
  10797. firenotpressed2
  10798.  
  10799. ; fire was not pressed last frame...
  10800.  
  10801. ; btst #7,$bfe001
  10802. ; if it has still not been pressed, go back above
  10803. ; bne.s firenownotpressed2
  10804. ; fire was not pressed last time, and was this time, so has
  10805. ; been clicked.
  10806. ; st PLR2_clicked
  10807. ; st PLR2_fire
  10808.  
  10809. dointer
  10810.  
  10811. JUSTSOUNDS:
  10812.  
  10813.  tst.b dosounds
  10814.  beq.s .notthing
  10815.  
  10816.  cmp.b #'4',Prefsfile+1
  10817.     beq fourchannel
  10818.  
  10819.  btst #1,$dff000+intreqr
  10820.     bne.s newsampbitl
  10821.  
  10822. .notthing:
  10823.  
  10824.  movem.l (a7)+,d0-d7/a0-a6
  10825.  
  10826.  moveq #0,d0
  10827.  rts
  10828.  
  10829.  
  10830. dosounds: dc.w 0
  10831.  
  10832. swappedem: dc.w 0
  10833.  
  10834. newsampbitl:
  10835.  
  10836.  move.w #$820f,$dff000+dmacon
  10837.  
  10838.  move.w #$200,$dff000+intreq
  10839.  
  10840. ; tst.b CHANNELDATA
  10841. ; bne nochannel0
  10842.  
  10843.  move.l pos0LEFT,a0
  10844.  move.l pos2LEFT,a1
  10845.  
  10846.  move.l #tab,a2
  10847.  
  10848.  moveq #0,d0
  10849.  moveq #0,d1
  10850.  move.b vol0left,d0
  10851.  move.b vol2left,d1
  10852.  cmp.b d1,d0
  10853.  slt swappedem
  10854.  bge.s fbig0
  10855.  
  10856. ; d1 is bigger so scale d0 and use d1
  10857. ; as audiochannel volume.
  10858.  
  10859.  exg a0,a1
  10860.  asl.w #6,d0
  10861.  divs d1,d0
  10862.  lsl.w #8,d0
  10863.  adda.w d0,a2
  10864.  move.w d1,$dff0a8
  10865.  bra.s donechan0
  10866.  
  10867. fbig0:
  10868.  tst.w d0
  10869.  beq.s donechan0
  10870.  asl.w #6,d1
  10871.  divs d0,d1
  10872.  lsl.w #8,d1
  10873.  adda.w d1,a2
  10874.  move.w d0,$dff0a8
  10875.  
  10876. donechan0:
  10877.  
  10878.  move.l Aupt0,a3
  10879.  move.l a3,$dff0a0
  10880.  move.l Auback0,Aupt0
  10881.  move.l a3,Auback0
  10882.  
  10883.  move.l Auback0,a3
  10884.  
  10885.  moveq #0,d0
  10886.  moveq #0,d1
  10887.  moveq #0,d2
  10888.  moveq #0,d3
  10889.  moveq #0,d4
  10890.  moveq #0,d5
  10891.  move.w #49,d7
  10892. loop:
  10893.  move.l (a0)+,d0
  10894.  move.b (a1)+,d1
  10895.  move.b (a1)+,d2
  10896.  move.b (a1)+,d3
  10897.  move.b (a1)+,d4
  10898.  move.b (a2,d3.w),d5
  10899.  swap d5
  10900.  move.b (a2,d1.w),d5
  10901.  asl.l #8,d5
  10902.  move.b (a2,d2.w),d5
  10903.  swap d5
  10904.  move.b (a2,d4.w),d5
  10905.  add.l d5,d0
  10906.  move.l d0,(a3)+
  10907.  dbra d7,loop
  10908.  
  10909.  tst.b swappedem
  10910.  beq.s .ok23
  10911.  exg a0,a1
  10912. .ok23:
  10913.  
  10914.  cmp.l Samp0endLEFT,a0
  10915.  blt.s .notoffendsamp1
  10916.  move.l #empty,a0
  10917.  move.l #emptyend,Samp0endLEFT
  10918.  move.b #0,vol0left
  10919.  st LEFTCHANDATA+1
  10920.  move.w #0,LEFTCHANDATA+2
  10921. .notoffendsamp1:
  10922.  
  10923.  cmp.l Samp2endLEFT,a1
  10924.  blt.s .notoffendsamp2
  10925.  move.l #empty,a1
  10926.  move.l #emptyend,Samp2endLEFT
  10927.  move.b #0,vol2left
  10928.  st LEFTCHANDATA+1+8
  10929.  move.w #0,LEFTCHANDATA+2+8
  10930. .notoffendsamp2:
  10931.  
  10932.  move.l a0,pos0LEFT
  10933.  move.l a1,pos2LEFT
  10934.  
  10935. nochannel0:
  10936.  
  10937.  tst.b CHANNELDATA+16
  10938.  bne nochannel1
  10939.  
  10940.  
  10941.  move.l pos0RIGHT,a0
  10942.  move.l pos2RIGHT,a1
  10943.  
  10944.  move.l Aupt1,a3
  10945.  move.l a3,$dff0b0
  10946.  move.l Auback1,Aupt1
  10947.  move.l a3,Auback1
  10948.  
  10949.  move.l #tab,a2
  10950.  
  10951.  moveq #0,d0
  10952.  moveq #0,d1
  10953.  move.b vol0right,d0
  10954.  move.b vol2right,d1
  10955.  cmp.b d1,d0
  10956.  slt swappedem
  10957.  bge.s fbig1
  10958.  
  10959. ; d1 is bigger so scale d0 and use d1
  10960. ; as audiochannel volume.
  10961.  
  10962.  exg a0,a1
  10963.  asl.w #6,d0
  10964.  divs d1,d0
  10965.  lsl.w #8,d0
  10966.  adda.w d0,a2
  10967.  move.w d1,$dff0b8
  10968.  bra.s donechan1
  10969.  
  10970. fbig1:
  10971.  tst.w d0
  10972.  beq.s donechan1
  10973.  asl.w #6,d1
  10974.  divs d0,d1
  10975.  lsl.w #8,d1
  10976.  adda.w d1,a2
  10977.  move.w d0,$dff0b8
  10978.  
  10979. donechan1:
  10980.  moveq #0,d0
  10981.  moveq #0,d1
  10982.  moveq #0,d2
  10983.  moveq #0,d3
  10984.  moveq #0,d4
  10985.  moveq #0,d5
  10986.  move.w #49,d7
  10987. loop2:
  10988.  move.l (a0)+,d0
  10989.  move.b (a1)+,d1
  10990.  move.b (a1)+,d2
  10991.  move.b (a1)+,d3
  10992.  move.b (a1)+,d4
  10993.  move.b (a2,d3.w),d5
  10994.  swap d5
  10995.  move.b (a2,d1.w),d5
  10996.  asl.l #8,d5
  10997.  move.b (a2,d2.w),d5
  10998.  swap d5
  10999.  move.b (a2,d4.w),d5
  11000.  add.l d5,d0
  11001.  move.l d0,(a3)+
  11002.  dbra d7,loop2
  11003.  
  11004.  tst.b swappedem
  11005.  beq.s ok01
  11006.  exg a0,a1
  11007. ok01:
  11008.  
  11009.  cmp.l Samp0endRIGHT,a0
  11010.  blt.s .notoffendsamp1
  11011.  move.l #empty,a0
  11012.  move.l #emptyend,Samp0endRIGHT
  11013.  move.b #0,vol0right
  11014.  st RIGHTCHANDATA+1
  11015.  move.w #0,RIGHTCHANDATA+2
  11016. .notoffendsamp1:
  11017.  
  11018.  cmp.l Samp2endRIGHT,a1
  11019.  blt.s .notoffendsamp2
  11020.  move.l #empty,a1
  11021.  move.l #emptyend,Samp2endRIGHT
  11022.  move.b #0,vol2right
  11023.  st RIGHTCHANDATA+1+8
  11024.  move.w #0,RIGHTCHANDATA+2+8
  11025. .notoffendsamp2:
  11026.  
  11027.  move.l a0,pos0RIGHT
  11028.  move.l a1,pos2RIGHT
  11029.  
  11030. nochannel1:
  11031.  
  11032. ******************* Other two channels
  11033.  
  11034.  move.l pos1LEFT,a0
  11035.  move.l pos3LEFT,a1
  11036.  
  11037.  move.l #tab,a2
  11038.  
  11039.  moveq #0,d0
  11040.  moveq #0,d1
  11041.  move.b vol1left,d0
  11042.  move.b vol3left,d1
  11043.  cmp.b d1,d0
  11044.  slt swappedem
  11045.  bge.s fbig2
  11046.  
  11047. ; d1 is bigger so scale d0 and use d1
  11048. ; as audiochannel volume.
  11049.  
  11050.  exg a0,a1
  11051.  asl.w #6,d0
  11052.  divs d1,d0
  11053.  lsl.w #8,d0
  11054.  adda.w d0,a2
  11055.  move.w d1,$dff0d8
  11056.  bra.s donechan2
  11057.  
  11058. fbig2:
  11059.  tst.w d0
  11060.  beq.s donechan2
  11061.  asl.w #6,d1
  11062.  divs d0,d1
  11063.  lsl.w #8,d1
  11064.  adda.w d1,a2
  11065.  move.w d0,$dff0d8
  11066.  
  11067. donechan2:
  11068.  
  11069.  move.l Aupt2,a3
  11070.  move.l a3,$dff0d0
  11071.  move.l Auback2,Aupt2
  11072.  move.l a3,Auback2
  11073.  
  11074.  moveq #0,d0
  11075.  moveq #0,d1
  11076.  moveq #0,d2
  11077.  moveq #0,d3
  11078.  moveq #0,d4
  11079.  moveq #0,d5
  11080.  move.w #49,d7
  11081. loop3:
  11082.  move.l (a0)+,d0
  11083.  move.b (a1)+,d1
  11084.  move.b (a1)+,d2
  11085.  move.b (a1)+,d3
  11086.  move.b (a1)+,d4
  11087.  move.b (a2,d3.w),d5
  11088.  swap d5
  11089.  move.b (a2,d1.w),d5
  11090.  asl.l #8,d5
  11091.  move.b (a2,d2.w),d5
  11092.  swap d5
  11093.  move.b (a2,d4.w),d5
  11094.  add.l d5,d0
  11095.  move.l d0,(a3)+
  11096.  dbra d7,loop3
  11097.  
  11098.  tst.b swappedem
  11099.  beq.s .ok23
  11100.  exg a0,a1
  11101. .ok23:
  11102.  
  11103.  cmp.l Samp1endLEFT,a0
  11104.  blt.s .notoffendsamp3
  11105.  move.l #empty,a0
  11106.  move.l #emptyend,Samp1endLEFT
  11107.  move.b #0,vol1left
  11108.  st LEFTCHANDATA+1+4
  11109.  move.w #0,LEFTCHANDATA+2+4
  11110. .notoffendsamp3:
  11111.  
  11112.  cmp.l Samp3endLEFT,a1
  11113.  blt.s .notoffendsamp4
  11114.  move.l #empty,a1
  11115.  move.l #emptyend,Samp3endLEFT
  11116.  move.b #0,vol3left
  11117.  st LEFTCHANDATA+1+12
  11118.  move.w #0,LEFTCHANDATA+2+12
  11119. .notoffendsamp4:
  11120.  
  11121.  move.l a0,pos1LEFT
  11122.  move.l a1,pos3LEFT
  11123.  
  11124.  move.l pos1RIGHT,a0
  11125.  move.l pos3RIGHT,a1
  11126.  
  11127.  move.l Aupt3,a3
  11128.  move.l a3,$dff0c0
  11129.  move.l Auback3,Aupt3
  11130.  move.l a3,Auback3
  11131.  
  11132.  move.l #tab,a2
  11133.  
  11134.  moveq #0,d0
  11135.  moveq #0,d1
  11136.  move.b vol1right,d0
  11137.  move.b vol3right,d1
  11138.  cmp.b d1,d0
  11139.  slt.s swappedem
  11140.  bge.s fbig3
  11141.  
  11142.  exg a0,a1
  11143.  asl.w #6,d0
  11144.  divs d1,d0
  11145.  lsl.w #8,d0
  11146.  adda.w d0,a2
  11147.  move.w d1,$dff0c8
  11148.  bra.s donechan3
  11149.  
  11150. fbig3:
  11151.  tst.w d0
  11152.  beq.s donechan3
  11153.  asl.w #6,d1
  11154.  divs d0,d1
  11155.  lsl.w #8,d1
  11156.  adda.w d1,a2
  11157.  move.w d0,$dff0c8
  11158. donechan3:
  11159.  
  11160.  moveq #0,d0
  11161.  moveq #0,d1
  11162.  moveq #0,d2
  11163.  moveq #0,d3
  11164.  moveq #0,d4
  11165.  moveq #0,d5
  11166.  move.w #49,d7
  11167. loop4:
  11168.  move.l (a0)+,d0
  11169.  move.b (a1)+,d1
  11170.  move.b (a1)+,d2
  11171.  move.b (a1)+,d3
  11172.  move.b (a1)+,d4
  11173.  move.b (a2,d3.w),d5
  11174.  swap d5
  11175.  move.b (a2,d1.w),d5
  11176.  asl.l #8,d5
  11177.  move.b (a2,d2.w),d5
  11178.  swap d5
  11179.  move.b (a2,d4.w),d5
  11180.  add.l d5,d0
  11181.  move.l d0,(a3)+
  11182.  dbra d7,loop4
  11183.  
  11184.  tst.b swappedem
  11185.  beq.s .ok23
  11186.  exg a0,a1
  11187. .ok23:
  11188.  
  11189.  cmp.l Samp1endRIGHT,a0
  11190.  blt.s notoffendsamp3
  11191.  move.l #empty,a0
  11192.  move.l #emptyend,Samp1endRIGHT
  11193.  move.b #0,vol1right
  11194.  st RIGHTCHANDATA+1+4
  11195.  move.w #0,RIGHTCHANDATA+2+4
  11196. notoffendsamp3:
  11197.  
  11198.  cmp.l Samp3endRIGHT,a1
  11199.  blt.s notoffendsamp4
  11200.  move.l #empty,a1
  11201.  move.l #emptyend,Samp3endRIGHT
  11202.  move.b #0,vol3right
  11203.  st RIGHTCHANDATA+1+12
  11204.  move.w #0,RIGHTCHANDATA+2+12
  11205. notoffendsamp4:
  11206.  
  11207.  move.l a0,pos1RIGHT
  11208.  move.l a1,pos3RIGHT
  11209.  
  11210.  movem.l (a7)+,d0-d7/a0-a6
  11211.  tst.b counting
  11212.  beq .nostartcounter
  11213.  JSR STARTCOUNT
  11214. .nostartcounter:
  11215.  
  11216.  moveq #0,d0
  11217.  rts
  11218.  
  11219. ***********************************
  11220. * 4 channel sound routine
  11221. ***********************************
  11222.  
  11223. fourchannel:
  11224.  
  11225.  move.l #$dff000,a6
  11226.  
  11227.  btst #7,intreqrl(a6)
  11228.  beq.s nofinish0
  11229. ; move.w #0,LEFTCHANDATA+2
  11230. ; st LEFTCHANDATA+1
  11231.  move.l #null,$a0(a6)
  11232.  move.w #100,$a4(a6) 
  11233.  move.w #$0080,intreq(a6)
  11234. nofinish0:
  11235.  
  11236.  tst.b NoiseMade0pLEFT
  11237.  beq.s NoChan0sound
  11238.  
  11239.  move.l Samp0endLEFT,d0
  11240.  move.l pos0LEFT,d1
  11241.  sub.l d1,d0
  11242.  lsr.l #1,d0
  11243.  move.w d0,$a4(a6)
  11244.  move.l d1,$a0(a6)
  11245.  ext.l d0
  11246.  divs #100,d0
  11247.  move.w d0,playnull0
  11248.  move.w #$8201,dmacon(a6)
  11249.  moveq #0,d0
  11250.  move.b vol0left,d0
  11251.  move.w d0,$a8(a6)
  11252.  
  11253. NoChan0sound:
  11254.  
  11255. *****************************************
  11256. *****************************************
  11257.  
  11258.  btst #0,intreqr(a6)
  11259.  beq.s nofinish1
  11260.  move.l #null,$b0(a6)
  11261.  move.w #100,$b4(a6)
  11262.  move.w #$0100,intreq(a6)
  11263. nofinish1:
  11264.  
  11265.  tst.b NoiseMade0pRIGHT
  11266.  beq.s NoChan1sound
  11267.  
  11268.  move.l Samp0endRIGHT,d0
  11269.  move.l pos0RIGHT,d1
  11270.  sub.l d1,d0
  11271.  lsr.l #1,d0
  11272.  move.w d0,$b4(a6)
  11273.  move.l d1,$b0(a6)
  11274.  ext.l d0
  11275.  divs #100,d0
  11276.  move.w d0,playnull1
  11277.  move.w #$8202,dmacon(a6)
  11278.  moveq #0,d0
  11279.  move.b vol0right,d0
  11280.  move.w d0,$b8(a6)
  11281.  
  11282. NoChan1sound:
  11283.  
  11284. *****************************************
  11285. *****************************************
  11286.  
  11287.  btst #1,intreqr(a6)
  11288.  beq.s nofinish2
  11289.  move.l #null,$c0(a6)
  11290.  move.w #100,$c4(a6)
  11291.  move.w #$0200,intreq(a6)
  11292. nofinish2:
  11293.  
  11294.  tst.b NoiseMade1pRIGHT
  11295.  beq.s NoChan2sound
  11296.  
  11297.  move.l Samp1endRIGHT,d0
  11298.  move.l pos1RIGHT,d1
  11299.  sub.l d1,d0
  11300.  lsr.l #1,d0
  11301.  move.w d0,$c4(a6)
  11302.  ext.l d0
  11303.  divs #100,d0
  11304.  move.w d0,playnull2
  11305.  
  11306.  move.l d1,$c0(a6)
  11307.  move.w #$8204,dmacon(a6)
  11308.  moveq #0,d0
  11309.  move.b vol1right,d0
  11310.  move.w d0,$c8(a6)
  11311.  
  11312. NoChan2sound:
  11313.  
  11314. *****************************************
  11315. *****************************************
  11316.  
  11317.  btst #2,intreqr(a6)
  11318.  beq.s nofinish3
  11319.  move.l #null,$d0(a6)
  11320.  move.w #100,$d4(a6)
  11321.  move.w #$0400,intreq(a6)
  11322. nofinish3:
  11323.  
  11324.  tst.b NoiseMade1pLEFT
  11325.  beq.s NoChan3sound
  11326.  
  11327.  move.l Samp1endLEFT,d0
  11328.  move.l pos1LEFT,d1
  11329.  sub.l d1,d0
  11330.  lsr.l #1,d0
  11331.  move.w d0,$d4(a6)
  11332.  ext.l d0
  11333.  divs #100,d0
  11334.  move.w d0,playnull3
  11335.  move.l d1,$d0(a6)
  11336.  move.w #$8208,dmacon(a6)
  11337.  moveq #0,d0
  11338.  move.b vol1left,d0
  11339.  move.w d0,$d8(a6)
  11340.  
  11341. NoChan3sound:
  11342.  
  11343. nomorechannels:
  11344.  
  11345.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  11346.  move.l #0,NoiseMade0LEFT
  11347.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  11348.  move.l #0,NoiseMade0RIGHT
  11349.  
  11350. ; tst.b playnull0
  11351. ; beq.s .nnul
  11352. ; sub.b #1,playnull0
  11353. ; bra.s chan0still
  11354. ;.nnul:
  11355. ;chan0still:
  11356.  
  11357.  tst.b NoiseMade0pLEFT
  11358.  bne.s chan0still
  11359.  tst.w playnull0
  11360.  beq.s nnul0
  11361.  sub.w #1,playnull0
  11362.  bra.s chan0still
  11363. nnul0:
  11364.  move.w #0,LEFTCHANDATA+2
  11365.  st LEFTCHANDATA+1
  11366. chan0still:
  11367.  
  11368.  tst.b NoiseMade0pRIGHT
  11369.  bne.s chan1still    ;it'll never work
  11370.  tst.w playnull1
  11371.  beq.s nnul1
  11372.  sub.w #1,playnull1
  11373.  bra.s chan1still
  11374. nnul1:
  11375.  move.w #0,RIGHTCHANDATA+2
  11376.  st RIGHTCHANDATA+1
  11377. chan1still:
  11378.  
  11379.  tst.b NoiseMade1pRIGHT
  11380.  bne.s chan2still
  11381.  tst.w playnull2
  11382.  beq.s nnul2
  11383.  sub.w #1,playnull2
  11384.  bra.s chan2still
  11385. nnul2:
  11386.  move.w #0,RIGHTCHANDATA+2+4
  11387.  st RIGHTCHANDATA+1+4
  11388. chan2still:
  11389.  
  11390.  tst.b NoiseMade1pLEFT
  11391.  bne.s chan3still
  11392.  tst.w playnull3
  11393.  beq.s nnul3
  11394.  sub.w #1,playnull3
  11395.  bra.s chan3still
  11396. nnul3:
  11397.  move.w #0,LEFTCHANDATA+2+4
  11398.  st LEFTCHANDATA+1+4
  11399.  
  11400. chan3still:
  11401.  
  11402.  
  11403.  movem.l (a7)+,d0-d7/a0-a6
  11404.  
  11405.  moveq #0,d0
  11406.  rts
  11407.  
  11408. backbeat: dc.w 0
  11409.  
  11410. playnull0: dc.w 0
  11411. playnull1: dc.w 0
  11412. playnull2: dc.w 0
  11413. playnull3: dc.w 0
  11414.  
  11415. Samp0endRIGHT: dc.l emptyend
  11416. Samp1endRIGHT: dc.l emptyend
  11417. Samp2endRIGHT: dc.l emptyend
  11418. Samp3endRIGHT: dc.l emptyend
  11419. Samp0endLEFT: dc.l emptyend
  11420. Samp1endLEFT: dc.l emptyend
  11421. Samp2endLEFT: dc.l emptyend
  11422. Samp3endLEFT: dc.l emptyend
  11423.  
  11424. Aupt0: dc.l null
  11425. Auback0: dc.l null+500
  11426. Aupt2: dc.l null3
  11427. Auback2: dc.l null3+500
  11428. Aupt3: dc.l null4
  11429. Auback3: dc.l null4+500
  11430. Aupt1: dc.l null2
  11431. Auback1: dc.l null2+500
  11432.  
  11433. NoiseMade0LEFT: dc.b 0
  11434. NoiseMade1LEFT: dc.b 0
  11435. NoiseMade2LEFT: dc.b 0
  11436. NoiseMade3LEFT: dc.b 0
  11437. NoiseMade0pLEFT: dc.b 0
  11438. NoiseMade1pLEFT: dc.b 0
  11439. NoiseMade2pLEFT: dc.b 0
  11440. NoiseMade3pLEFT: dc.b 0
  11441. NoiseMade0RIGHT: dc.b 0
  11442. NoiseMade1RIGHT: dc.b 0
  11443. NoiseMade2RIGHT: dc.b 0
  11444. NoiseMade3RIGHT: dc.b 0
  11445. NoiseMade0pRIGHT: dc.b 0
  11446. NoiseMade1pRIGHT: dc.b 0
  11447. NoiseMade2pRIGHT: dc.b 0
  11448. NoiseMade3pRIGHT: dc.b 0
  11449.  
  11450. empty: ds.l 100
  11451. emptyend:
  11452.  
  11453. **************************************
  11454. * I want a routine to calculate all the
  11455. * info needed for the sound player to
  11456. * work, given say position of noise, volume
  11457. * and sample number.
  11458.  
  11459. Samplenum: dc.w 0
  11460. Noisex: dc.w 0
  11461. Noisez: dc.w 0
  11462. Noisevol: dc.w 0
  11463. chanpick: dc.w 0
  11464. IDNUM: dc.w 0
  11465. needleft: dc.b 0
  11466. needright: dc.b 0
  11467. STEREO: dc.b $0
  11468. even
  11469. prot6: dc.w 0
  11470.  
  11471.  even
  11472.  
  11473. CHANNELDATA:
  11474. LEFTCHANDATA:
  11475.  dc.l $00000000
  11476.  dc.l $00000000
  11477.  dc.l $FF000000
  11478.  dc.l $FF000000
  11479. RIGHTCHANDATA:
  11480.  dc.l $00000000
  11481.  dc.l $00000000
  11482.  dc.l $FF000000
  11483.  dc.l $FF000000
  11484.  
  11485. RIGHTPLAYEDTAB: ds.l 20
  11486. LEFTPLAYEDTAB: ds.l 20
  11487.  
  11488. MakeSomeNoise:
  11489.  
  11490. ; Plan for new sound handler:
  11491. ; It is sent a sample number,
  11492. ; a position relative to the
  11493. ; player, an id number and a volume.
  11494. ; Also notifplaying.
  11495.  
  11496. ; indirect inputs are the available
  11497. ; channel flags and whether or not
  11498. ; stereo sound is selected.
  11499.  
  11500. ; the algorithm must decide
  11501. ; whether the new sound is more
  11502. ; important than the ones already
  11503. ; playing. Thus an 'importance'
  11504. ; must be calculated, probably
  11505. ; using volume.
  11506.  
  11507. ; The output needs to be:
  11508.  
  11509. ; Write the pointers and volumes of
  11510. ; the sound channels
  11511.  
  11512.  
  11513.  tst.b notifplaying
  11514.  beq.s dontworry
  11515.  
  11516. ; find if we are already playing
  11517.  
  11518.  move.b IDNUM,d0
  11519.  move.w #7,d1
  11520.  lea CHANNELDATA,a3
  11521. findsameasme
  11522.  tst.b (a3)
  11523.  bne.s notavail
  11524.  cmp.b 1(a3),d0
  11525.  beq SameAsMe
  11526. notavail:
  11527.  add.w #4,a3
  11528.  dbra d1,findsameasme
  11529.  bra dontworry
  11530. SameAsMe
  11531.  rts
  11532.  
  11533. noiseloud: dc.w 0
  11534.  
  11535. dontworry:
  11536.  
  11537. ; Ok its fine for us to play a sound.
  11538. ; So calculate left/right volume.
  11539.  
  11540.  move.w Noisex,d1
  11541.  muls d1,d1
  11542.  move.w Noisez,d2
  11543.  muls d2,d2
  11544.  move.w #64,d3
  11545.  move.w #32767,noiseloud
  11546.  moveq #1,d0
  11547.  add.l d1,d2
  11548.  beq pastcalc
  11549.  
  11550.  move.w #31,d0
  11551. .findhigh
  11552.  btst d0,d2
  11553.  bne .foundhigh
  11554.  dbra d0,.findhigh
  11555. .foundhigh
  11556.  asr.w #1,d0
  11557.  clr.l d3
  11558.  bset d0,d3
  11559.  move.l d3,d0
  11560.  
  11561.  move.w d0,d3
  11562.  muls d3,d3    ; x*x
  11563.  sub.l d2,d3    ; x*x-a
  11564.  asr.l #1,d3    ; (x*x-a)/2
  11565.  divs d0,d3    ; (x*x-a)/2x
  11566.  sub.w d3,d0    ; second approx
  11567.  bgt .stillnot0
  11568.  move.w #1,d0
  11569. .stillnot0
  11570.  
  11571.  move.w d0,d3
  11572.  muls d3,d3
  11573.  sub.l d2,d3
  11574.  asr.l #1,d3
  11575.  divs d0,d3
  11576.  sub.w d3,d0    ; second approx
  11577.  bgt .stillnot02
  11578.  move.w #1,d0
  11579. .stillnot02
  11580.  
  11581.  move.w Noisevol,d3
  11582.  ext.l d3
  11583.  asl.l #6,d3
  11584.  cmp.l #32767,d3
  11585.  ble.s .nnnn
  11586.  move.l #32767,d3
  11587. .nnnn
  11588.  
  11589.  asr.w #2,d0
  11590.  addq #1,d0
  11591.  divs d0,d3
  11592.  
  11593.  move.w d3,noiseloud
  11594.  
  11595.  cmp.w #64,d3
  11596.  ble.s notooloud
  11597.  move.w #64,d3
  11598. notooloud:
  11599.  
  11600. pastcalc:
  11601.  
  11602.     ; d3 contains volume of noise.
  11603.     
  11604.  move.w d3,d4
  11605.  tst.b STEREO
  11606.  beq NOSTEREO
  11607.  
  11608.  move.w d3,d2
  11609.  muls Noisex,d2
  11610.  asl.w #2,d0
  11611.  divs d0,d2
  11612.  
  11613.  bgt.s quietleft
  11614.  add.w d2,d4
  11615.  bge.s donequiet
  11616.  move.w #0,d4
  11617.  bra.s donequiet
  11618. quietleft:
  11619.  sub.w d2,d3
  11620.  bge.s donequiet
  11621.  move.w #0,d3
  11622. donequiet:
  11623.  
  11624. ; d3=leftvol?
  11625. ; d4=rightvol?
  11626.  
  11627.  clr.w needleft
  11628.  
  11629.  cmp.b d3,d4
  11630.  bgt.s RightLouder
  11631.  
  11632. ; Left is louder; is it MUCH louder?
  11633.  
  11634.  st needleft
  11635.  move.w d3,d2
  11636.  sub.w d4,d2
  11637.  cmp.w #32,d2
  11638.  slt needright
  11639.  bra aboutsame
  11640.  
  11641. RightLouder:
  11642.  st needright
  11643.  move.w d4,d2
  11644.  sub.w d3,d2
  11645.  cmp.w #32,d2
  11646.  slt needleft
  11647.  
  11648. aboutsame:
  11649.  
  11650.  
  11651. ; Find least important sound on left
  11652.  
  11653.  move.l #0,a2
  11654.  move.l #0,d5
  11655.  move.w #32767,d2
  11656.  move.b IDNUM,d0
  11657.  lea LEFTCHANDATA,a3
  11658.  move.w #3,d1
  11659. FindLeftChannel
  11660.  tst.b (a3)
  11661.  bne.s .notactive
  11662.  cmp.b 1(a3),d0
  11663.  beq.s FOUNDLEFT
  11664.  cmp.w 2(a3),d2
  11665.  blt.s .notactive
  11666.  move.w 2(a3),d2
  11667.  move.l a3,a2
  11668.  move.w d5,d6
  11669.  
  11670. .notactive:
  11671.  add.w #4,a3
  11672.  add.w #1,d5
  11673.  dbra d1,FindLeftChannel
  11674.  move.l a2,a3
  11675.  bra.s gopastleft
  11676. FOUNDLEFT:
  11677.  move.w d5,d6
  11678. gopastleft:
  11679.  tst.l a3
  11680.  bne.s FOUNDALEFT
  11681. NONOISE:
  11682.  rts
  11683. FOUNDALEFT:
  11684.  
  11685.  cmp.w noiseloud,d3
  11686.  bge.s NONOISE
  11687.  
  11688. ; d6 = channel number
  11689.  move.b d0,1(a3)
  11690.  move.w d3,2(a3)
  11691.  
  11692.  move.w Samplenum,d5
  11693.  move.l #SampleList,a3
  11694.  move.l (a3,d5.w*8),a1
  11695.  move.l 4(a3,d5.w*8),a2
  11696.  
  11697.  tst.b d6
  11698.  seq NoiseMade0LEFT
  11699.  beq.s .chan0
  11700.  cmp.b #2,d6
  11701.  slt NoiseMade1LEFT
  11702.  blt .chan1
  11703.  seq NoiseMade2LEFT
  11704.  beq .chan2
  11705.  st NoiseMade3LEFT
  11706.  
  11707.  move.b d5,LEFTPLAYEDTAB+9
  11708.  move.b d3,LEFTPLAYEDTAB+1+9
  11709.  move.b d4,LEFTPLAYEDTAB+2+9
  11710.  move.b d3,vol3left
  11711.  move.l a1,pos3LEFT
  11712.  move.l a2,Samp3endLEFT
  11713.  bra dorightchan
  11714.  
  11715. .chan0: 
  11716.  move.b d5,LEFTPLAYEDTAB
  11717.  move.b d3,LEFTPLAYEDTAB+1
  11718.  move.b d4,LEFTPLAYEDTAB+2
  11719.  move.l a1,pos0LEFT
  11720.  move.l a2,Samp0endLEFT
  11721.  move.b d3,vol0left
  11722.  bra dorightchan
  11723.  
  11724. .chan1:
  11725.  move.b d5,LEFTPLAYEDTAB+3
  11726.  move.b d3,LEFTPLAYEDTAB+1+3
  11727.  move.b d4,LEFTPLAYEDTAB+2+3
  11728.  move.b d3,vol1left
  11729.  move.l a1,pos1LEFT
  11730.  move.l a2,Samp1endLEFT
  11731.  bra dorightchan
  11732.  
  11733. .chan2: 
  11734.  move.b d5,LEFTPLAYEDTAB+6
  11735.  move.b d3,LEFTPLAYEDTAB+1+6
  11736.  move.b d4,LEFTPLAYEDTAB+2+6
  11737.  move.l a1,pos2LEFT
  11738.  move.l a2,Samp2endLEFT
  11739.  move.b d3,vol2left
  11740.  
  11741. dorightchan:
  11742.  
  11743. ; Find least important sound on right
  11744.  
  11745.  move.l #0,a2
  11746.  move.l #0,d5
  11747.  move.w #10000,d2
  11748.  move.b IDNUM,d0
  11749.  lea RIGHTCHANDATA,a3
  11750.  move.w #3,d1
  11751. FindRightChannel
  11752.  tst.b (a3)
  11753.  bne.s .notactive
  11754.  cmp.b 1(a3),d0
  11755.  beq.s FOUNDRIGHT
  11756.  cmp.w 2(a3),d2
  11757.  blt.s .notactive
  11758.  move.w 2(a3),d2
  11759.  move.l a3,a2
  11760.  move.w d5,d6
  11761.  
  11762. .notactive:
  11763.  add.w #4,a3
  11764.  add.w #1,d5
  11765.  dbra d1,FindRightChannel
  11766.  move.l a2,a3
  11767.  bra.s gopastright
  11768. FOUNDRIGHT:
  11769.  move.w d5,d6
  11770. gopastright:
  11771.  tst.l a3
  11772.  bne.s FOUNDARIGHT
  11773.  rts
  11774. FOUNDARIGHT:
  11775.  
  11776. ; d6 = channel number
  11777.  move.b d0,1(a3)
  11778.  move.w d3,2(a3)
  11779.  
  11780.  move.w Samplenum,d5
  11781.  move.l #SampleList,a3
  11782.  move.l (a3,d5.w*8),a1
  11783.  move.l 4(a3,d5.w*8),a2
  11784.  
  11785.  tst.b d6
  11786.  seq NoiseMade0RIGHT
  11787.  beq.s .chan0
  11788.  cmp.b #2,d6
  11789.  slt NoiseMade1RIGHT
  11790.  blt .chan1
  11791.  seq NoiseMade2RIGHT
  11792.  beq .chan2
  11793.  st NoiseMade3RIGHT
  11794.  
  11795.  move.b d5,RIGHTPLAYEDTAB+9
  11796.  move.b d3,RIGHTPLAYEDTAB+1+9
  11797.  move.b d4,RIGHTPLAYEDTAB+2+9
  11798.  move.b d4,vol3right
  11799.  move.l a1,pos3RIGHT
  11800.  move.l a2,Samp3endRIGHT
  11801.  rts
  11802.  
  11803. .chan0: 
  11804.  move.b d5,RIGHTPLAYEDTAB
  11805.  move.b d3,RIGHTPLAYEDTAB+1
  11806.  move.b d4,RIGHTPLAYEDTAB+2
  11807.  move.l a1,pos0RIGHT
  11808.  move.l a2,Samp0endRIGHT
  11809.  move.b d4,vol0right
  11810.  rts
  11811.  
  11812. .chan1:
  11813.  move.b d5,RIGHTPLAYEDTAB+3
  11814.  move.b d3,RIGHTPLAYEDTAB+1+3
  11815.  move.b d4,RIGHTPLAYEDTAB+2+3
  11816.  move.b d3,vol1right
  11817.  move.l a1,pos1RIGHT
  11818.  move.l a2,Samp1endRIGHT
  11819.  rts
  11820.  
  11821. .chan2: 
  11822.  move.b d5,RIGHTPLAYEDTAB+6
  11823.  move.b d3,RIGHTPLAYEDTAB+1+6
  11824.  move.b d4,RIGHTPLAYEDTAB+2+6
  11825.  move.l a1,pos2RIGHT
  11826.  move.l a2,Samp2endRIGHT
  11827.  move.b d3,vol2right
  11828.  rts
  11829.  
  11830. NOSTEREO:
  11831.  move.l #0,a2
  11832.  move.l #-1,d5
  11833.  move.w #32767,d2
  11834.  move.b IDNUM,d0
  11835.  lea CHANNELDATA,a3
  11836.  move.w #7,d1
  11837. FindChannel
  11838.  tst.b (a3)
  11839.  bne.s .notactive
  11840.  cmp.b 1(a3),d0
  11841.  beq.s FOUNDMYCHAN
  11842.  cmp.w 2(a3),d2
  11843.  blt.s .notactive
  11844.  move.w 2(a3),d2
  11845.  move.l a3,a2
  11846.  move.w d5,d6
  11847.  add.w #1,d6
  11848.  
  11849. .notactive:
  11850.  add.w #4,a3
  11851.  add.w #1,d5
  11852.  dbra d1,FindChannel
  11853.  
  11854.  move.l a2,a3
  11855.  bra.s gopastchan
  11856.  
  11857. FOUNDMYCHAN:
  11858.  move.w 2(a3),d2
  11859.  
  11860. FOUNDCHAN:
  11861.  move.w d5,d6
  11862.  add.w #1,d6
  11863. gopastchan:
  11864.  tst.w d6
  11865.  bge.s FOUNDACHAN
  11866. tooquiet:
  11867.  rts
  11868. FOUNDACHAN:
  11869.  
  11870. ; d6 = channel number
  11871.  
  11872.  cmp.w noiseloud,d2
  11873.  bgt.s tooquiet
  11874.  
  11875.  move.b d0,1(a3)
  11876.  move.w noiseloud,2(a3)
  11877.  
  11878.  move.w Samplenum,d5
  11879.  move.l #SampleList,a3
  11880.  move.l (a3,d5.w*8),a1
  11881.  move.l 4(a3,d5.w*8),a2
  11882.  
  11883.  tst.b d6
  11884.  beq .chan0
  11885.  cmp.b #2,d6
  11886.  blt .chan1
  11887.  beq .chan2
  11888.  cmp.b #4,d6
  11889.  blt .chan3
  11890.  beq .chan4
  11891.  cmp.b #6,d6
  11892.  blt .chan5
  11893.  beq .chan6
  11894.  st NoiseMade3RIGHT
  11895.  
  11896.  move.b d5,RIGHTPLAYEDTAB+9
  11897.  move.b d3,RIGHTPLAYEDTAB+1+9
  11898.  move.b d4,RIGHTPLAYEDTAB+2+9
  11899.  move.b d4,vol3right
  11900.  move.l a1,pos3RIGHT
  11901.  move.l a2,Samp3endRIGHT
  11902.  rts
  11903.  
  11904. .chan3:
  11905.  st NoiseMade3LEFT
  11906.  move.b d5,LEFTPLAYEDTAB+9
  11907.  move.b d3,LEFTPLAYEDTAB+1+9
  11908.  move.b d4,LEFTPLAYEDTAB+2+9
  11909.  move.b d3,vol3left
  11910.  move.l a1,pos3LEFT
  11911.  move.l a2,Samp3endLEFT
  11912.  bra dorightchan
  11913.  
  11914. .chan0: 
  11915.  st NoiseMade0LEFT
  11916.  move.b d5,LEFTPLAYEDTAB
  11917.  move.b d3,LEFTPLAYEDTAB+1
  11918.  move.b d4,LEFTPLAYEDTAB+2
  11919.  move.l a1,pos0LEFT
  11920.  move.l a2,Samp0endLEFT
  11921.  move.b d3,vol0left
  11922.  rts
  11923.  
  11924. .chan1:
  11925.  st NoiseMade1LEFT
  11926.  move.b d5,LEFTPLAYEDTAB+3
  11927.  move.b d3,LEFTPLAYEDTAB+1+3
  11928.  move.b d4,LEFTPLAYEDTAB+2+3
  11929.  move.b d3,vol1left
  11930.  move.l a1,pos1LEFT
  11931.  move.l a2,Samp1endLEFT
  11932.  rts
  11933.  
  11934. .chan2: 
  11935.  st NoiseMade2LEFT
  11936.  move.b d5,LEFTPLAYEDTAB+6
  11937.  move.b d3,LEFTPLAYEDTAB+1+6
  11938.  move.b d4,LEFTPLAYEDTAB+2+6
  11939.  move.l a1,pos2LEFT
  11940.  move.l a2,Samp2endLEFT
  11941.  move.b d3,vol2left
  11942.  rts
  11943.  
  11944. .chan4: 
  11945.  st NoiseMade0RIGHT
  11946.  move.b d5,RIGHTPLAYEDTAB
  11947.  move.b d3,RIGHTPLAYEDTAB+1
  11948.  move.b d4,RIGHTPLAYEDTAB+2
  11949.  move.l a1,pos0RIGHT
  11950.  move.l a2,Samp0endRIGHT
  11951.  move.b d4,vol0right
  11952.  rts
  11953.  
  11954. .chan5:
  11955.  st NoiseMade1RIGHT
  11956.  move.b d5,RIGHTPLAYEDTAB+3
  11957.  move.b d3,RIGHTPLAYEDTAB+1+3
  11958.  move.b d4,RIGHTPLAYEDTAB+2+3
  11959.  move.b d3,vol1right
  11960.  move.l a1,pos1RIGHT
  11961.  move.l a2,Samp1endRIGHT
  11962.  rts
  11963.  
  11964. .chan6: 
  11965.  st NoiseMade2RIGHT
  11966.  move.b d5,RIGHTPLAYEDTAB+6
  11967.  move.b d3,RIGHTPLAYEDTAB+1+6
  11968.  move.b d4,RIGHTPLAYEDTAB+2+6
  11969.  move.l a1,pos2RIGHT
  11970.  move.l a2,Samp2endRIGHT
  11971.  move.b d3,vol2right
  11972.  rts
  11973.  
  11974. SampleList:
  11975.  dc.l Scream,EndScream
  11976.  dc.l Shoot,EndShoot
  11977.  dc.l Munch,EndMunch
  11978.  dc.l PooGun,EndPooGun
  11979.  dc.l Collect,EndCollect
  11980. ;5
  11981.  dc.l DoorNoise,EndDoorNoise
  11982.  dc.l 0,0
  11983.  dc.l Stomp,EndStomp
  11984.  dc.l LowScream,EndLowScream
  11985.  dc.l BaddieGun,EndBaddieGun
  11986. ;10
  11987.  dc.l SwitchNoise,EndSwitch
  11988.  dc.l Reload,EndReload
  11989.  dc.l NoAmmo,EndNoAmmo
  11990.  dc.l Splotch,EndSplotch
  11991.  dc.l SplatPop,EndSplatPop
  11992. ;15
  11993.  dc.l Boom,EndBoom
  11994.  dc.l Hiss,EndHiss
  11995.  dc.l Howl1,EndHowl1
  11996.  dc.l Howl2,EndHowl2
  11997.  dc.l Pant,EndPant
  11998. ;20
  11999.  dc.l Whoosh,EndWhoosh
  12000.  dc.l ROAR,EndROAR
  12001.  dc.l whoosh,Endwhoosh
  12002.  dc.l 0,0
  12003.  dc.l 0,0
  12004.  dc.l 0,0
  12005.  dc.l 0,0
  12006.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  12007.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  12008.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  12009.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  12010.  
  12011.  dc.l 0
  12012.  
  12013. storeval: dc.w 0
  12014.  
  12015.  include "ab3:CHEESESAUCE/wallchunk.s"
  12016.  include "ab3:CHEESESAUCE/newloadfromdisk.s"
  12017.  include "ab3:CHEESESAUCE/screensetup.s"
  12018.  include "ab3:CHEESESAUCE/CONTROLLOOP.s"
  12019.  
  12020.  
  12021.  
  12022.  
  12023. saveinters:  
  12024.  dc.w 0
  12025.  
  12026. z: dc.w 10
  12027.  
  12028. notifplaying:
  12029.  dc.w 0
  12030.  
  12031. audpos1: dc.w 0
  12032. audpos1b: dc.w 0
  12033. audpos2: dc.w 0
  12034. audpos2b: dc.w 0
  12035. audpos3: dc.w 0
  12036. audpos3b: dc.w 0
  12037. audpos4: dc.w 0
  12038. audpos4b: dc.w 0
  12039.  
  12040. vol0left: dc.w 0
  12041. vol0right: dc.w 0
  12042. vol1left: dc.w 0
  12043. vol1right: dc.w 0
  12044. vol2left: dc.w 0
  12045. vol2right: dc.w 0
  12046. vol3left: dc.w 0
  12047. vol3right: dc.w 0
  12048.  
  12049. pos: dc.l 0
  12050.  
  12051. pos0LEFT: dc.l empty
  12052. pos1LEFT: dc.l empty
  12053. pos2LEFT: dc.l empty
  12054. pos3LEFT: dc.l empty
  12055. pos0RIGHT: dc.l empty
  12056. pos1RIGHT: dc.l empty
  12057. pos2RIGHT: dc.l empty
  12058. pos3RIGHT: dc.l empty
  12059.  
  12060. numtodo dc.w 0
  12061.  
  12062. npt: dc.w 0
  12063.  
  12064. pretab:
  12065. val SET 0
  12066.  REPT 128
  12067.  dc.b val
  12068. val SET val+1
  12069.  ENDR
  12070. val SET -128
  12071.  REPT 128
  12072.  dc.b val
  12073. val SET val+1
  12074.  ENDR 
  12075.  
  12076. tab:
  12077.  ifeq CHEESEY
  12078.  ds.b 256*65
  12079.  endc
  12080.  
  12081. test: dc.l 0
  12082.  ds.l 30
  12083.  
  12084.  
  12085.  even
  12086. ConstCols:
  12087. ; incbin "ConstCols"
  12088.  even
  12089. Smoothscalecols:
  12090. ; incbin "smoothbumppalscaled"
  12091.  even
  12092. SmoothTile:
  12093. ; incbin "smoothbumptile"
  12094.  even
  12095. Bumpscalecols:
  12096. ; incbin "Bumppalscaled"
  12097.  even
  12098. Bumptile:
  12099. ; incbin "bumptile"
  12100.  even
  12101. scalecols: ;incbin "bytepixpalscaled"
  12102.  even
  12103. floorpalscaled:
  12104.  incbin "floorpalscaled"
  12105. ; ds.w 256*4
  12106.  
  12107.  even
  12108. PaletteAddr: dc.l 0
  12109. ChunkAddr: dc.l 0
  12110. ;walltiles:
  12111. ; dc.l GreenMechanicWALL
  12112. ; dc.l BlueGreyMetalWALL
  12113. ; dc.l TechnoDetailWALL
  12114. ; dc.l BlueStoneWALL
  12115. ; dc.l RedAlertWALL
  12116. ; dc.l RockWALL
  12117. ;
  12118. ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  12119. ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  12120. ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  12121. ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  12122. ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  12123. ;RockWALL: incbin "ab3:includes/walls/rock.wad"
  12124.  
  12125. floortile:
  12126.  dc.l 0
  12127. ; incbin "floortile" 
  12128.  even
  12129. wallrouts:
  12130. ; incbin "2x2WallDraw" 
  12131.  CNOP 0,64
  12132.  
  12133.  ifeq CHEESEY 
  12134. BackPicture:
  12135.  incbin "rawback"
  12136. EndBackPicture:
  12137.  endc
  12138.  
  12139. drawpt: dc.l 0
  12140. olddrawpt: dc.l 0
  12141. frompt: dc.l 0 
  12142.  
  12143. SineTable:
  12144.  incbin "bigsine"
  12145.  
  12146. angspd: dc.w 0
  12147. flooryoff: dc.w 0
  12148. xoff: dc.l 0
  12149. yoff: dc.l 0
  12150. yvel: dc.l 0
  12151. zoff: dc.l 0
  12152. tyoff: dc.l 0
  12153. xspdval: dc.l 0
  12154. zspdval: dc.l 0
  12155. Zone: dc.w 0
  12156.  
  12157. PLR1: dc.b $ff
  12158.  even
  12159. PLR1_energy: dc.w 191
  12160. PLR1_GunSelected: dc.w 0
  12161. PLR1_cosval: dc.w 0
  12162. PLR1_sinval: dc.w 0
  12163. PLR1_angpos: dc.w 0
  12164. PLR1_angspd: dc.w 0
  12165. PLR1_xoff: dc.l 0
  12166. PLR1_yoff: dc.l 0
  12167. PLR1_yvel: dc.l 0
  12168. PLR1_zoff: dc.l 0
  12169. PLR1_tyoff: dc.l 0
  12170. PLR1_xspdval: dc.l 0
  12171. PLR1_zspdval: dc.l 0
  12172. PLR1_Zone: dc.w 0
  12173. PLR1_Roompt: dc.l 0
  12174. PLR1_FloorSpd: dc.l 0
  12175. PLR2_FloorSpd: dc.l 0
  12176. PLR1_OldRoompt: dc.l 0
  12177. PLR1_PointsToRotatePtr: dc.l 0
  12178. PLR1_ListOfGraphRooms: dc.l 0
  12179. PLR1_oldxoff: dc.l 0
  12180. PLR1_oldzoff: dc.l 0
  12181. PLR1_StoodInTop: dc.b 0
  12182.  even
  12183. PLR1_height: dc.l 0
  12184. PLR1_RoomBright: dc.w 0
  12185.  
  12186. DOUBLEWIDTH: dc.b $0,0
  12187. DOUBLEHEIGHT: dc.b 0,0
  12188. PLR1_TELEPORTED: dc.w 0
  12189. PLR2_TELEPORTED: dc.w 0
  12190.  
  12191.  ds.w 4
  12192.  
  12193. OLDX1: dc.l 0
  12194. OLDX2: dc.l 0
  12195. OLDZ1: dc.l 0
  12196. OLDZ2: dc.l 0
  12197.  
  12198. XDIFF1: dc.l 0
  12199. ZDIFF1: dc.l 0
  12200. XDIFF2: dc.l 0
  12201. ZDIFF2: dc.l 0
  12202.  
  12203. PLR1s_cosval: dc.w 0
  12204. PLR1s_sinval: dc.w 0
  12205. PLR1s_angpos: dc.w 0
  12206. PLR1s_angspd: dc.w 0
  12207. PLR1s_xoff: dc.l 0
  12208. PLR1s_yoff: dc.l 0
  12209. PLR1s_yvel: dc.l 0
  12210. PLR1s_zoff: dc.l 0
  12211. PLR1s_tyoff: dc.l 0
  12212. PLR1s_xspdval: dc.l 0
  12213. PLR1s_zspdval: dc.l 0
  12214. PLR1s_Zone: dc.w 0
  12215. PLR1s_Roompt: dc.l 0
  12216. PLR1s_OldRoompt: dc.l 0
  12217. PLR1s_PointsToRotatePtr: dc.l 0
  12218. PLR1s_ListOfGraphRooms: dc.l 0
  12219. PLR1s_oldxoff: dc.l 0
  12220. PLR1s_oldzoff: dc.l 0
  12221. PLR1s_height: dc.l 0
  12222. PLR1s_targheight: dc.l 0
  12223.  
  12224. p1_xoff: dc.l 0
  12225. p1_zoff: dc.l 0
  12226. p1_yoff: dc.l 0
  12227. p1_height: dc.l 0
  12228. p1_angpos: dc.w 0
  12229. p1_bobble: dc.w 0
  12230. p1_clicked: dc.b 0
  12231. p1_spctap: dc.b 0
  12232. p1_ducked: dc.b 0
  12233. p1_gunselected: dc.b 0
  12234. p1_fire: dc.b 0
  12235.  even
  12236. p1_holddown: dc.w 0
  12237.  
  12238.  ds.w 4
  12239.  
  12240. PLR2: dc.b $ff
  12241.  even
  12242. PLR2_GunSelected: dc.w 0
  12243. PLR2_energy: dc.w 191
  12244. PLR2_cosval: dc.w 0
  12245. PLR2_sinval: dc.w 0
  12246. PLR2_angpos: dc.w 0
  12247. PLR2_angspd: dc.w 0
  12248. PLR2_xoff: dc.l 0
  12249. PLR2_yoff: dc.l 0
  12250. PLR2_yvel: dc.l 0
  12251. PLR2_zoff: dc.l 0
  12252. PLR2_tyoff: dc.l 0
  12253. PLR2_xspdval: dc.l 0
  12254. PLR2_zspdval: dc.l 0
  12255. PLR2_Zone: dc.w 0
  12256. PLR2_Roompt: dc.l 0
  12257. PLR2_OldRoompt: dc.l 0
  12258. PLR2_PointsToRotatePtr: dc.l 0
  12259. PLR2_ListOfGraphRooms: dc.l 0
  12260. PLR2_oldxoff: dc.l 0
  12261. PLR2_oldzoff: dc.l 0
  12262. PLR2_StoodInTop: dc.b 0
  12263.  even
  12264. PLR2_height: dc.l 0
  12265.  
  12266.  ds.w 4
  12267.  
  12268. PLR2s_cosval: dc.w 0
  12269. PLR2s_sinval: dc.w 0
  12270. PLR2s_angpos: dc.w 0
  12271. PLR2s_angspd: dc.w 0
  12272. PLR2s_xoff: dc.l 0
  12273. PLR2s_yoff: dc.l 0
  12274. PLR2s_yvel: dc.l 0
  12275. PLR2s_zoff: dc.l 0
  12276. PLR2s_tyoff: dc.l 0
  12277. PLR2s_xspdval: dc.l 0
  12278. PLR2s_zspdval: dc.l 0
  12279. PLR2s_Zone: dc.w 0
  12280. PLR2s_Roompt: dc.l 0
  12281. PLR2s_OldRoompt: dc.l 0
  12282. PLR2s_PointsToRotatePtr: dc.l 0
  12283. PLR2s_ListOfGraphRooms: dc.l 0
  12284. PLR2s_oldxoff: dc.l 0
  12285. PLR2s_oldzoff: dc.l 0
  12286. PLR2s_height: dc.l 0
  12287. PLR2s_targheight: dc.l 0
  12288.  
  12289.  ds.w 4
  12290.  
  12291. p2_xoff: dc.l 0
  12292. p2_zoff: dc.l 0
  12293. p2_yoff: dc.l 0
  12294. p2_height: dc.l 0
  12295. p2_angpos: dc.w 0
  12296. p2_bobble: dc.w 0
  12297. p2_clicked: dc.b 0
  12298. p2_spctap: dc.b 0
  12299. p2_ducked: dc.b 0
  12300. p2_gunselected: dc.b 0
  12301. p2_fire: dc.b 0
  12302.  even
  12303. p2_holddown: dc.w 0
  12304.  
  12305. liftanimtab:
  12306.  
  12307. endliftanimtab:
  12308.  
  12309. glassball:
  12310. ; incbin "glassball.inc"
  12311.  
  12312. endglass
  12313. glassballpt: dc.l glassball
  12314.  
  12315. rndtab: ; incbin "randfile"
  12316. endrnd: 
  12317.  
  12318. brightanimtab:
  12319. ; dcb.w 200,20
  12320. ; dc.w 5
  12321. ; dc.w 10,20
  12322. ; dc.w 5
  12323. ; dcb.w 30,20
  12324. ; dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  12325. ; dcb.w 40,0
  12326. ; dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  12327. ; dcb.w 300,0
  12328. ; dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  12329. ; dc.w -1
  12330.  
  12331. Roompt: dc.l 0
  12332. OldRoompt: dc.l 0
  12333.  
  12334. *****************************************************************
  12335.  *
  12336.  include "AB3:CHEESESAUCE/LevelData2"
  12337.  *
  12338. *****************************************************************
  12339.  
  12340.  
  12341. wallpt: dc.l 0
  12342. floorpt: dc.l 0
  12343.  
  12344. Rotated:
  12345.  ds.l 2*800 
  12346. ObjRotated:
  12347.  ds.l 2*500
  12348.  
  12349. OnScreen:
  12350.  ds.l 2*800 
  12351.  
  12352. startwait: dc.w 0
  12353. endwait: dc.w 0
  12354.  
  12355. ;Faces:
  12356. ; incbin "faces2raw"
  12357.  
  12358. LINKS: dc.l 0
  12359. FLYLINKS: dc.l 0
  12360. *************************************************************
  12361.  
  12362. consttab:
  12363.  incbin "constantfile"
  12364.  
  12365. *******************************************************************
  12366.  
  12367.  
  12368.  
  12369. *********************************
  12370.  
  12371. ; include "ab3:source_4000/loadmod.a"
  12372. ; include "ab3:source_4000/proplayer.a"
  12373.  
  12374.  
  12375. darkentab: 
  12376. ;val SET 0
  12377. ; REPT 256
  12378. ; dc.b val
  12379. ;val SET val+1
  12380. ; ENDR
  12381. ; incbin "darkenfile"
  12382.  
  12383. MIDDLEX: dc.w 0
  12384. RIGHTX: dc.w 192
  12385. FULLSCR: dc.w 0
  12386.  
  12387. SHADINGTABLE: incbin "SHADEFILE" 
  12388.  
  12389. ******************************************
  12390. * Link file !*****************************
  12391. ******************************************
  12392.  
  12393. LINKSPACE:
  12394. ; ds.l 22500
  12395. ; incbin "ab3:includes/test.lnk"
  12396.  
  12397. LINKname:
  12398.  dc.b "tkg1:includes/test.lnk",0
  12399.     even
  12400. LINKFILE:
  12401.  dc.l LINKSPACE
  12402.  
  12403. ******************************************
  12404.  
  12405.  
  12406. brightentab:
  12407.  incbin "brightenfile"
  12408. WorkSpace:
  12409.  ds.l 8192 
  12410. waterfile:
  12411.  incbin "waterfile"
  12412.  
  12413.  SECTION ffff,CODE_C
  12414.  
  12415. nullspr: dc.l 0
  12416.  
  12417.  cnop 0,8
  12418. ;borders:
  12419. ; incbin "newleftbord"
  12420. ; incbin "newrightbord"
  12421.  
  12422. health: 
  12423. ;incbin "healthstrip"
  12424. Ammunition: 
  12425. ;incbin "ammostrip"
  12426. healthpal: 
  12427. ;incbin "healthpal"
  12428. PanelKeys: 
  12429. ;incbin "greenkey"
  12430. ; incbin "redkey"
  12431. ; incbin "yellowkey"
  12432. ; incbin "bluekey"
  12433.  
  12434. null: ds.w 100
  12435. null2: ds.w 100
  12436. null3: ds.w 100
  12437. null4: ds.w 100
  12438.  
  12439.  
  12440. Blurbfield:
  12441.  
  12442.  dc.w bpl1ptl
  12443. bl1l: dc.w 0
  12444.  dc.w bpl1pth
  12445. bl1h: dc.w 0
  12446.  
  12447.  dc.w diwstart,$2c81
  12448.  dc.w diwstop,$1cc1
  12449.  dc.w ddfstart,$38
  12450.  dc.w ddfstop,$b8
  12451.  dc.w bplcon0,$9201
  12452.  dc.w bplcon1,0
  12453.  dc.w $106,$c40
  12454. blcols:
  12455.  dc.w col0,0
  12456.  dc.w col1,$fff
  12457.  
  12458.  dc.w $108,0
  12459.  dc.w $10a,0
  12460.  
  12461.  dc.w $ffff,$fffe
  12462.  dc.w $ffff,$fffe
  12463.  
  12464. nullline:
  12465.  ds.b 80    
  12466.  
  12467.  include "ab3:CHEESESAUCE/titlecop.s"
  12468.  
  12469. bigfield:    
  12470.                 ; Start of our copper list.
  12471.  dc.w dmacon,$8020
  12472.  dc.w intreq,$8011
  12473.  dc.w $1fc,$f
  12474.  dc.w diwstart
  12475. winstart: dc.w $2cb1
  12476.  dc.w diwstop
  12477. winstop: dc.w $2c91
  12478.  dc.w ddfstart
  12479. fetchstart: dc.w $48
  12480.  dc.w ddfstop
  12481. fetchstop: dc.w $88
  12482.  
  12483. bordercols:
  12484.  incbin "borderpal"
  12485.  
  12486.  dc.w spr0ptl
  12487. s0l:
  12488.  dc.w 0
  12489.  dc.w spr0pth
  12490. s0h:
  12491.  dc.w 0
  12492.  dc.w spr1ptl
  12493. s1l:
  12494.  dc.w 0
  12495.  dc.w spr1pth
  12496. s1h:
  12497.  dc.w 0
  12498.  dc.w spr2ptl
  12499. s2l:
  12500.  dc.w 0
  12501.  dc.w spr2pth
  12502. s2h:
  12503.  dc.w 0
  12504.  dc.w spr3ptl
  12505. s3l:
  12506.  dc.w 0
  12507.  dc.w spr3pth
  12508. s3h:
  12509.  dc.w 0
  12510.  dc.w spr4ptl
  12511. s4l:
  12512.  dc.w 0
  12513.  dc.w spr4pth
  12514. s4h:
  12515.  dc.w 0
  12516.  dc.w spr5ptl
  12517. s5l:
  12518.  dc.w 0
  12519.  dc.w spr5pth
  12520. s5h:
  12521.  dc.w 0
  12522.  dc.w spr6ptl
  12523. s6l:
  12524.  dc.w 0
  12525.  dc.w spr6pth
  12526. s6h:
  12527.  dc.w 0
  12528.  dc.w spr7ptl
  12529. s7l:
  12530.  dc.w 0
  12531.  dc.w spr7pth
  12532. s7h:
  12533.  dc.w 0
  12534.  
  12535.  dc.w $106,$c42
  12536.  incbin "borderpal"
  12537.  
  12538.  dc.w $106,$8c42
  12539.  dc.w col0
  12540. hitcol: dc.w $0
  12541.  dc.w $106,$c42
  12542.  dc.w col0
  12543. hitcol2: dc.w 0
  12544.  
  12545.  dc.w bplcon0,$7201
  12546.  dc.w bplcon1
  12547. smoff:
  12548.  dc.w $0
  12549.  
  12550.  dc.w $108
  12551. modulo: dc.w -24
  12552.  dc.w $10a,-24
  12553.  
  12554. ; dc.w $1001,$ff00
  12555. ; dc.w intreq,$11
  12556.  
  12557. ;PALETTESPACE:
  12558. ; dcb.l 528,$1fe0000
  12559. ;
  12560. ; dc.w $2001,$ff00
  12561.  
  12562.  dc.w bpl1pth
  12563. pl1h
  12564.  dc.w 0
  12565.  
  12566.  dc.w bpl1ptl
  12567. pl1l
  12568.  dc.w 0
  12569.  
  12570.  dc.w bpl2pth
  12571. pl2h
  12572.  dc.w 0
  12573.  
  12574.  dc.w bpl2ptl
  12575. pl2l
  12576.  dc.w 0
  12577.  
  12578.  dc.w bpl3pth
  12579. pl3h
  12580.  dc.w 0
  12581.  
  12582.  dc.w bpl3ptl
  12583. pl3l
  12584.  dc.w 0
  12585.  
  12586.  dc.w bpl4pth
  12587. pl4h
  12588.  dc.w 0
  12589.  
  12590.  dc.w bpl4ptl
  12591. pl4l
  12592.  dc.w 0
  12593.  
  12594.  dc.w bpl5pth
  12595. pl5h
  12596.  dc.w 0
  12597.  
  12598.  dc.w bpl5ptl
  12599. pl5l
  12600.  dc.w 0
  12601.  
  12602.  dc.w bpl6pth
  12603. pl6h
  12604.  dc.w 0
  12605.  
  12606.  dc.w bpl6ptl
  12607. pl6l
  12608.  dc.w 0
  12609.  
  12610.  dc.w bpl7pth
  12611. pl7h
  12612.  dc.w 0
  12613.  
  12614.  dc.w bpl7ptl
  12615. pl7l
  12616.  dc.w 0
  12617.  
  12618.  dc.w bpl8pth
  12619. pl8h
  12620.  dc.w 0
  12621.  
  12622.  dc.w bpl8ptl
  12623. pl8l
  12624.  dc.w 0
  12625.  
  12626.  dc.w $1001,$ff00
  12627.  dc.w intreq,$11
  12628. yposcop:
  12629.  dc.w $2a11,$fffe
  12630.  dc.w $8a,0
  12631.  
  12632.  
  12633. ;val SET $2c
  12634. ;SCRMODULOS:
  12635. ; REPT 232
  12636. ; dc.b val,1,$ff,$fe
  12637. ; dc.w $108,0
  12638. ; dc.w $10a,0
  12639. ; dc.b val,$df,$ff,$fe
  12640. ;val SET (val+1)&$ff
  12641. ; ENDR
  12642. ;
  12643. ; dc.w $108,0,$10a,0
  12644. ; dc.w $2401,$ff00
  12645. ; dc.w ddfstop,$c8
  12646. ; dc.w bplcon0,$9201
  12647. ; dc.w bpl1ptl
  12648. ;;scroll:
  12649. ; dc.w 0
  12650. ; dc.w bpl1pth
  12651. ;scrolh:
  12652. ; dc.w 0
  12653. ;
  12654. ; dc.w $106,$c40
  12655. ; dc.w $180,0
  12656. ; dc.w $182,$f0
  12657. ;; dc.w $108,40
  12658. ;; dc.w $10a,40
  12659. ;
  12660. ;; dc.w $80
  12661. ;;JUMPBACKH:
  12662. ;; dc.w 0
  12663. ;; dc.w $82
  12664. ;;JUMPBACKL:
  12665. ; dc.w 0
  12666.  
  12667. ; dc.w $8a,0
  12668. ; dc.w $ffff,$fffe
  12669. ; dc.w $ffff,$fffe
  12670.  
  12671.  
  12672. ;yposcop:
  12673. ; dc.w $2a11,$fffe
  12674. ; dc.w $8a,0
  12675.  
  12676. ; ds.l 104*12
  12677.  
  12678. ;colbars:
  12679. ;val SET $2a
  12680. ; dcb.l 104*80,$1fe0000
  12681. ; dc.w $106,$c42
  12682. ; dc.w $80
  12683. ;pch1:
  12684. ; dc.w 0
  12685. ; dc.w $82
  12686. ;pcl1:
  12687. ; dc.w 0 
  12688. ; dc.w $88,0
  12689. ; dc.w $ffff,$fffe       ; End copper list.
  12690.  
  12691. ; ds.l 104*12
  12692.  
  12693.  
  12694. ;colbars2:
  12695. ;val SET $2a
  12696. ; dcb.l 104*80,$1fe0000
  12697. ; dc.w $106,$c42
  12698. ; dc.w $80
  12699. ;pch2:
  12700. ; dc.w 0
  12701. ; dc.w $82
  12702. ;pcl2:
  12703. ; dc.w 0
  12704. ; dc.w $88,0
  12705. ; dc.w $ffff,$fffe       ; End copper list.
  12706.  
  12707. ; ds.l 104*10
  12708.  
  12709. NullCopper:
  12710.  dc.w $ffff,$fffe
  12711.  
  12712. PALETTEBIT:
  12713.  incbin "256palette"
  12714.  dc.w $ffff,$fffe
  12715.  
  12716.  
  12717. old: dc.l 0
  12718.  
  12719.  CNOP 0,64
  12720. SCROLLSCRN: ds.l 20*16
  12721.  
  12722. SCROLLOFFSET: dc.w 0
  12723. SCROLLTIMER: dc.w 100
  12724. SCROLLDIRECTION: dc.w 1
  12725. SCROLLXPOS: dc.w 0
  12726. SCROLLPOINTER: dc.l testscroll
  12727. ENDSCROLL: dc.l endtestscroll
  12728.  
  12729. testscroll:
  12730. ;      12345678901234567890123456789012345678901234567890123456789012345678901234567890
  12731. ; dc.b "The Quick Brown Fox Jumped Over The Lazy Dog!                                   "
  12732. ; dc.b "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ                            "
  12733. ; dc.b "The Quick Brown Fox Jumped Over The Lazy Dog!                                   "
  12734.  
  12735. BLANKSCROLL:
  12736.  dc.b "                                                                                "
  12737. endtestscroll: 
  12738.  
  12739. prot5: dc.w 0
  12740. PanelCop:
  12741.  
  12742.  dc.w $80
  12743. och:
  12744.  dc.w 0
  12745.  dc.w $82
  12746. ocl:
  12747.  dc.w 0
  12748.  
  12749. statskip:
  12750.  dc.w $1fe,0
  12751.  dc.w $1fe,0
  12752.  
  12753.  dc.w $10c,0
  12754.  dc.w bplcon0,$1201
  12755.  dc.w bpl1ptl
  12756. n1l:
  12757.  dc.w 0
  12758.  dc.w bpl1pth
  12759. n1h:
  12760.  dc.w 0
  12761.  dc.w $108,-24
  12762. ; incbin "Panelpal"
  12763.  
  12764. PALETTESPACE:
  12765.  dcb.l 528,$1fe0000
  12766.  
  12767.  dc.w bpl2pth
  12768. p2h
  12769.  dc.w 0
  12770.  
  12771.  dc.w bpl2ptl
  12772. p2l
  12773.  dc.w 0
  12774.  
  12775.  dc.w bpl3pth
  12776. p3h
  12777.  dc.w 0
  12778.  
  12779.  dc.w bpl3ptl
  12780. p3l
  12781.  dc.w 0
  12782.  
  12783.  dc.w bpl4pth
  12784. p4h
  12785.  dc.w 0
  12786.  dc.w bpl4ptl
  12787. p4l
  12788.  dc.w 0
  12789.  dc.w bpl5pth
  12790. p5h
  12791.  dc.w 0
  12792.  dc.w bpl5ptl
  12793. p5l
  12794.  dc.w 0
  12795.  dc.w bpl6pth
  12796. p6h
  12797.  dc.w 0
  12798.  dc.w bpl6ptl
  12799. p6l
  12800.  dc.w 0
  12801.  dc.w bpl7pth
  12802. p7h
  12803.  dc.w 0
  12804.  dc.w bpl7ptl
  12805. p7l
  12806.  dc.w 0
  12807.  dc.w bpl8pth
  12808. p8h
  12809.  dc.w 0
  12810.  dc.w bpl8ptl
  12811. p8l
  12812.  dc.w 0
  12813.  
  12814.  
  12815.  dc.w ddfstart,$38
  12816.  dc.w ddfstop,$b8
  12817.  dc.w diwstart,$2c81
  12818.  dc.w diwstop,$ecc1
  12819.  
  12820.  dc.w bplcon0
  12821. Panelcon: dc.w $0211
  12822.  dc.w bpl1pth
  12823. p1h
  12824.  dc.w 0
  12825.  
  12826.  dc.w bpl1ptl
  12827. p1l
  12828.  dc.w 0
  12829.  
  12830.  
  12831.  dc.w $108,0
  12832.  dc.w $10a,0
  12833.  
  12834. ; dc.w $ffff,$fffe
  12835.  
  12836.  dc.w $108,0,$10a,0
  12837.  dc.w $e401,$ff00
  12838.  dc.w ddfstop,$c8
  12839.  dc.w bplcon0,$9201
  12840.  dc.w bpl1ptl
  12841. scroll:
  12842.  dc.w 0
  12843.  dc.w bpl1pth
  12844. scrolh:
  12845.  dc.w 0
  12846.  
  12847.  dc.w $106,$c40
  12848.  dc.w $180,0
  12849.  dc.w $182,$f0
  12850. ; dc.w $108,40
  12851. ; dc.w $10a,40
  12852.  
  12853. ; dc.w $80
  12854. ;JUMPBACKH:
  12855. ; dc.w 0
  12856. ; dc.w $82
  12857. ;JUMPBACKL:
  12858. ; dc.w 0
  12859.  
  12860. ; dc.w $8a,0
  12861.  
  12862.  dc.w $ffff,$fffe
  12863.  
  12864.  
  12865.  dc.w $ffff,$fffe
  12866.  
  12867.  dc.w $180,$fff
  12868.  
  12869.  
  12870.  dc.w $f801,$ff00
  12871.  dc.w col1,$50
  12872.  dc.w $f901,$ff00
  12873.  dc.w col1,$90
  12874.  dc.w $fa01,$ff00
  12875.  dc.w col1,$f0
  12876.  dc.w $fb01,$ff00
  12877.  dc.w col1,$f0
  12878.  dc.w $fc01,$ff00
  12879.  dc.w col1,$90
  12880.  dc.w $fd01,$ff00
  12881.  dc.w col1,$50
  12882.  
  12883.  dc.w $fe01,$ff00
  12884.  dc.w col1,$fff
  12885.  
  12886.   
  12887.  dc.w $ffff,$fffe
  12888.  
  12889.  cnop 0,64
  12890. FacePlace:
  12891. ; ds.l 6*32*5
  12892.  
  12893. TEXTSCRN: dc.l 0
  12894.  
  12895. TEXTCOP:
  12896.  dc.w intreq,$8030
  12897.  
  12898.  dc.w spr0ptl
  12899. txs0l:
  12900.  dc.w 0
  12901.  dc.w spr0pth
  12902. txs0h:
  12903.  dc.w 0
  12904.  dc.w spr1ptl
  12905. txs1l:
  12906.  dc.w 0
  12907.  dc.w spr1pth
  12908. txs1h:
  12909.  dc.w 0
  12910.  dc.w spr2ptl
  12911. txs2l:
  12912.  dc.w 0
  12913.  dc.w spr2pth
  12914. txs2h:
  12915.  dc.w 0
  12916.  dc.w spr3ptl
  12917. txs3l:
  12918.  dc.w 0
  12919.  dc.w spr3pth
  12920. txs3h:
  12921.  dc.w 0
  12922.  dc.w spr4ptl
  12923. txs4l:
  12924.  dc.w 0
  12925.  dc.w spr4pth
  12926. txs4h:
  12927.  dc.w 0
  12928.  dc.w spr5ptl
  12929. txs5l:
  12930.  dc.w 0
  12931.  dc.w spr5pth
  12932. txs5h:
  12933.  dc.w 0
  12934.  dc.w spr6ptl
  12935. txs6l:
  12936.  dc.w 0
  12937.  dc.w spr6pth
  12938. txs6h:
  12939.  dc.w 0
  12940.  dc.w spr7ptl
  12941. txs7l:
  12942.  dc.w 0
  12943.  dc.w spr7pth
  12944. txs7h:
  12945.  dc.w 0
  12946.  
  12947.  
  12948.  dc.w $10c,$0088
  12949.  
  12950.  dc.w $1fc,$f
  12951.  dc.w diwstart,$2c81    ; Top left corner of screen.
  12952.  dc.w diwstop,$2cc1     ; Bottom right corner of screen.
  12953.  dc.w ddfstart,$38      ; Data fetch start.
  12954.  dc.w ddfstop,$c8       ; Data fetch stop.
  12955.  
  12956.  dc.w bplcon0
  12957. TSCP:
  12958.  dc.w $9201
  12959.  
  12960.  dc.w $106,$c40
  12961.  
  12962.  dc.w $2a01,$ff00
  12963.  
  12964.  dc.w col0,0
  12965.  dc.w col1
  12966. TOPLET:
  12967. TXTCOLL:
  12968.  dc.w 0
  12969.   dc.w col2
  12970. BOTLET:
  12971.  dc.w 0
  12972.  dc.w col3
  12973. ALLTEXT:
  12974.  dc.w $fff
  12975.  dc.w $106,$e40
  12976.  dc.w col3
  12977. ALLTEXTLOW:
  12978.  dc.w $0
  12979.  
  12980.  
  12981.  dc.w bpl1pth
  12982. TSPTh:
  12983.  dc.w 0
  12984.  dc.w bpl1ptl
  12985. TSPTl:
  12986.  dc.w 0
  12987.  
  12988.  dc.w bpl2pth
  12989. TSPTh2:
  12990.  dc.w 0
  12991.  dc.w bpl2ptl
  12992. TSPTl2:
  12993.  dc.w 0
  12994.  
  12995.  
  12996.  dc.w $108,0
  12997.  dc.w $10a,0
  12998.  
  12999.  dc.w $ffff,$fffe
  13000.  
  13001. ********************************************
  13002. * Stuff you don't have to worry about yet. *
  13003. ********************************************
  13004.  
  13005. closeeverything:
  13006.  
  13007. ; jsr mt_end
  13008.  
  13009.  move.l #nullcop,d0
  13010. ; move.l old,d0
  13011.  
  13012.  
  13013. ;charlie  
  13014.  move.l d0,$dff080     ; Restore old copper list.
  13015.  move.w d0,ocl
  13016.  swap d0
  13017.  move.w d0,och
  13018.  
  13019. ; move.l doslib,a6
  13020. ; move.l #4,d1
  13021. ; jsr -198(a6)
  13022.  
  13023. ; move.l doslib,d0
  13024. ; move.l d0,a1
  13025. ; move.l 4.w,a6
  13026. ; jsr CloseLib(a6)
  13027.  
  13028.  move.l #$dff000,a6
  13029.  move.w #$8020,dmacon(a6)
  13030.  move.w #$f,dmacon(a6)
  13031.  
  13032. ; move.l 4.w,a6
  13033. ; lea VBLANKInt,a1
  13034. ; moveq #INTB_COPER,d0
  13035. ; jsr _LVORemIntServer(a6)
  13036.  
  13037. ; IFEQ CD32VER
  13038. ; move.l OLDKINT,$68.w
  13039. ; ENDC
  13040. ; move.w saveinters,d0
  13041. ; or.w #$c000,d0
  13042. ; move.w d0,intena(a6)
  13043.  clr.w $dff0a8
  13044.  clr.w $dff0b8
  13045.  clr.w $dff0c8
  13046.  clr.w $dff0d8
  13047.  
  13048.  
  13049. ; move.l oldview,a1
  13050. ; move.l a1,d0
  13051. ; move.l gfxbase,a6
  13052. ; jsr -$de(a6)
  13053.  
  13054. ; cmp.b #'s',mors
  13055. ; beq.s leaveold
  13056. ; move.w #$f8e,$dff1dc
  13057. ;leaveold:
  13058.  
  13059.  jsr RELEASELEVELMEM
  13060.  jsr RELEASESCRNMEM
  13061.  
  13062.  move.l #0,d0
  13063.  
  13064.  rts
  13065.  
  13066.  
  13067.  
  13068. intbase: dc.l 0
  13069. gfxbase: dc.l 0
  13070. oldview: dc.l 0
  13071.  
  13072. stuff:
  13073.  
  13074.     PRSDL
  13075.     Lea    gfxname(pc),a1    
  13076.     Moveq.l    #0,d0
  13077.     Move.l    $4.w,a6    
  13078.     Jsr    -$228(a6)
  13079.     add.w d1,RVAL1
  13080.     Move.l     d0,gfxbase
  13081.     Move.l    d0,a6                Use As Base Reg
  13082.     Move.l    34(a6),oldview
  13083.     move.l 38(a6),old
  13084.     rts
  13085.  
  13086. gfxname dc.b "graphics.library",0
  13087.  even
  13088. INTUNAME    dc.b    "intuition.library",0
  13089.  
  13090.  even
  13091.  
  13092.  
  13093.  cnop 0,64
  13094.  
  13095. Panel:
  13096.  dc.l 0
  13097.  
  13098. TimerScr: 
  13099. ;ds.b 40*64
  13100.  
  13101. scrntab:
  13102.  ds.b 16
  13103. val SET 32
  13104.  REPT 96
  13105.  dc.b val,val,val
  13106. val SET val+1
  13107.  ENDR
  13108.  ds.b 16
  13109.  
  13110. smallscrntab:
  13111. val SET 32
  13112.  REPT 96
  13113.  dc.b val,val
  13114. val SET val+1
  13115.  ENDR
  13116.  
  13117. ; dc.l 0
  13118. ; incbin "ab3:includes/newborderRAW"
  13119. ; ds.b 80
  13120. ;scrn2:
  13121. ; dc.l 0
  13122.  
  13123. ;flib:
  13124. ; incbin "ab3:includes/newborderRAW"
  13125. ; ds.b 80
  13126. ;flib2:
  13127. ; incbin "ab3:includes/newborderRAW"
  13128. ; ds.b 80
  13129.  
  13130. ; incbin "ab3:includes/newborderRAW"
  13131. ; ds.b 80
  13132.  
  13133. SCRNDRAWPT: dc.l PANELSTRIP
  13134. ;SCRNSHOWPT: dc.l 0
  13135.  
  13136. PANELSTRIP: incbin "ab3:includes/smallpanelraw"
  13137.  
  13138.  
  13139.  cnop 0,64
  13140. scrn:
  13141.  dcb.l 8,$33333333
  13142.  dc.l 0
  13143.  dc.l 0
  13144.  
  13145.  dcb.l 8,$0f0f0f0f
  13146.  dc.l 0
  13147.  dc.l 0
  13148.  
  13149.  dcb.l 8,$00ff00ff
  13150.  dc.l 0
  13151.  dc.l 0
  13152.  
  13153.  dcb.l 8,$0000ffff
  13154.  dc.l 0
  13155.  dc.l 0
  13156.  
  13157.  dc.l 0,-1,0,-1,0,-1,0,-1
  13158.  dc.l 0
  13159.  dc.l 0
  13160.  
  13161.  dc.l -1,-1,0,0,-1,-1,0,0
  13162.  dc.l 0
  13163.  dc.l 0
  13164.  
  13165.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  13166.  dc.l 0
  13167.  dc.l 0
  13168.  
  13169. NumTimes: dc.l 0
  13170. TimeCount: dc.l 0
  13171. oldtime: dc.l 0
  13172. counting: dc.b 0
  13173. oktodisplay: dc.b 0
  13174.  
  13175. INITTIMER:
  13176.  move.l #0,TimeCount
  13177.  move.l #0,NumTimes
  13178.  rts
  13179.  
  13180. STARTCOUNT:
  13181.  move.l d0,-(a7)
  13182.  move.l $dff004,d0
  13183.  and.l #$1ffff,d0
  13184.  move.l d0,oldtime
  13185.  st counting
  13186.  move.l (a7)+,d0
  13187.  rts
  13188.  
  13189. STOPCOUNT:
  13190.  move.l d0,-(a7)
  13191.  move.l $dff004,d0
  13192.  and.l #$1ffff,d0
  13193.  
  13194.  sub.l oldtime,d0
  13195.  cmp.l #-256,d0
  13196.  bge.s okcount
  13197.  add.l #313*256,d0
  13198. okcount:
  13199.  add.l d0,TimeCount
  13200.  addq.l #1,NumTimes
  13201.  clr.b counting
  13202.  move.l (a7)+,d0
  13203.  rts
  13204.  
  13205. STOPCOUNTNOADD:
  13206.  move.l d0,-(a7)
  13207.  move.l $dff004,d0
  13208.  and.l #$1ffff,d0
  13209.  
  13210.  sub.l oldtime,d0
  13211.  cmp.l #-256,d0
  13212.  bge.s okcount2
  13213.  add.l #313*256,d0
  13214. okcount2:
  13215.  add.l d0,TimeCount
  13216.  clr.b counting
  13217.  move.l (a7)+,d0
  13218.  rts
  13219.  
  13220. maxbot: dc.w 0
  13221. tstneg: dc.l 0
  13222.  
  13223. STOPTIMER:
  13224.  st oktodisplay
  13225.  rts
  13226.  
  13227. digits: incbin "numbers.inc"
  13228.  
  13229. COMPACTMAP: ds.l 257
  13230.  
  13231. BIGMAP: ds.l 256*10
  13232.  
  13233.  Section Sounds,CODE_C
  13234.  
  13235. nullcop:
  13236.  dc.w $106,$c40
  13237.  dc.w $180,0 
  13238.  dc.w $100,$0
  13239.  dc.w $ffff,$fffe
  13240.  
  13241. Scream:
  13242. ; incbin "ab3:sounds/Scream"
  13243. ; ds.w 100
  13244. EndScream:
  13245. LowScream:
  13246. ; incbin "ab3:sounds/LowScream"
  13247. ; ds.w 100
  13248. EndLowScream:
  13249. BaddieGun:
  13250. ; incbin "ab3:sounds/BaddieGun"
  13251. EndBaddieGun:
  13252. bass:
  13253. ; incbin "ab3:sounds/backbass+drum"
  13254. bassend:
  13255. Shoot:
  13256. ; incbin "ab3:sounds/fire!"
  13257. EndShoot:
  13258. Munch:
  13259. ; incbin "ab3:sounds/munch"
  13260. EndMunch:
  13261. PooGun:
  13262. ; incbin "ab3:sounds/shoot.dm"
  13263. EndPooGun:
  13264. Collect:
  13265. ; incbin "ab3:sounds/collect"
  13266. EndCollect:
  13267. DoorNoise:
  13268. ; incbin "ab3:sounds/newdoor"
  13269. EndDoorNoise:
  13270. Stomp:
  13271. ; incbin "ab3:sounds/footstep3"
  13272. EndStomp:
  13273. SwitchNoise:
  13274. ; incbin "ab3:sounds/switch"
  13275. EndSwitch:
  13276. Reload:
  13277. ; incbin "ab3:sounds/switch1.SFX"
  13278. EndReload:
  13279.  
  13280. CHEATFRAME:
  13281.  dc.b 26,20,33,27,17,12
  13282. ENDCHEAT:
  13283.  
  13284. NoAmmo:
  13285. ; incbin "ab3:sounds/noammo"
  13286. EndNoAmmo:
  13287. Splotch:
  13288. ; incbin "ab3:sounds/splotch"
  13289. EndSplotch:
  13290. SplatPop:
  13291. ; incbin "ab3:sounds/splatpop"
  13292. EndSplatPop:
  13293. Boom:
  13294. ; incbin "ab3:sounds/boom"
  13295. EndBoom:
  13296. Hiss:
  13297. ; incbin "ab3:sounds/newhiss"
  13298. EndHiss:
  13299. Howl1:
  13300. ; incbin "ab3:sounds/howl1"
  13301. EndHowl1:
  13302. Howl2:
  13303. ; incbin "ab3:sounds/howl2"
  13304. EndHowl2:
  13305. Pant:
  13306. ; incbin "ab3:sounds/pant"
  13307. EndPant:
  13308. Whoosh:
  13309. ; incbin "ab3:sounds/whoosh"
  13310. EndWhoosh:
  13311. ROAR:
  13312. ; incbin "ab3:sounds/bigscream"
  13313. EndROAR
  13314. whoosh:
  13315. ; incbin "ab3:sounds/flame"
  13316. Endwhoosh:
  13317.  SECTION music,code_c
  13318.  
  13319. UseAllChannels: dc.w 0
  13320.  
  13321. mt_init:
  13322.  
  13323.  
  13324.     move.l    mt_data,a0
  13325.     move.l    a0,a1
  13326.     add.l    #$3b8,a1
  13327.     moveq    #$7f,d0
  13328.     moveq    #0,d1
  13329. mt_loop:move.l    d1,d2
  13330.     subq.w    #1,d0
  13331. mt_lop2:move.b    (a1)+,d1
  13332.     cmp.b    d2,d1
  13333.     bgt.s    mt_loop
  13334.     dbf    d0,mt_lop2
  13335.     addq.b    #1,d2
  13336.  
  13337.     lea    mt_samplestarts(pc),a1
  13338.     asl.l    #8,d2
  13339.     asl.l    #2,d2
  13340.     add.l    #$43c,d2
  13341.     add.l    a0,d2
  13342.     move.l    d2,a2
  13343.     moveq    #$1e,d0
  13344. mt_lop3:
  13345.     clr.l    (a2)
  13346.     move.l    a2,(a1)+
  13347.     moveq    #0,d1
  13348.     move.w    42(a0),d1
  13349.     asl.l    #1,d1
  13350.     add.l    d1,a2
  13351.     add.l    #$1e,a0
  13352.     dbf    d0,mt_lop3
  13353.  
  13354.     or.b    #$2,$bfe001
  13355.     move.b    #$6,mt_speed
  13356.     clr.w    $dff0a8
  13357.     clr.w    $dff0b8
  13358.     clr.w    $dff0c8
  13359.     clr.w    $dff0d8
  13360.     clr.b    mt_songpos
  13361.     clr.b    mt_counter
  13362.     clr.w    mt_pattpos
  13363.     rts
  13364.  
  13365. mt_end:    clr.w    $dff0a8
  13366.     clr.w    $dff0b8
  13367.     clr.w    $dff0c8
  13368.     clr.w    $dff0d8
  13369.     move.w    #$f,$dff096
  13370.     rts
  13371.  
  13372. mt_music:
  13373.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  13374.     move.l    mt_data,a0
  13375.     addq.b    #$1,mt_counter
  13376.     move.b    mt_counter,D0
  13377.     cmp.b    mt_speed,D0
  13378.     blt.s    mt_nonew
  13379.     clr.b    mt_counter
  13380.     bra    mt_getnew
  13381.  
  13382. mt_nonew:
  13383.     lea    mt_voice1(pc),a6
  13384.     lea    $dff0a0,a5
  13385.     bsr    mt_checkcom
  13386.     lea    mt_voice2(pc),a6
  13387.     lea    $dff0b0,a5
  13388.     bsr    mt_checkcom
  13389. ;    tst.b UseAllChannels
  13390. ;    beq mt_endr
  13391.      lea    mt_voice3(pc),a6
  13392.     lea    $dff0c0,a5
  13393.     bsr    mt_checkcom
  13394.     lea    mt_voice4(pc),a6
  13395.     lea    $dff0d0,a5
  13396.     bsr    mt_checkcom
  13397.     bra    mt_endr
  13398.  
  13399. mt_arpeggio:
  13400.     moveq    #0,d0
  13401.     move.b    mt_counter,d0
  13402.     divs    #$3,d0
  13403.     swap    d0
  13404.     cmp.w    #$0,d0
  13405.     beq.s    mt_arp2
  13406.     cmp.w    #$2,d0
  13407.     beq.s    mt_arp1
  13408.  
  13409.     moveq    #0,d0
  13410.     move.b    $3(a6),d0
  13411.     lsr.b    #4,d0
  13412.     bra.s    mt_arp3
  13413. mt_arp1:moveq    #0,d0
  13414.     move.b    $3(a6),d0
  13415.     and.b    #$f,d0
  13416.     bra.s    mt_arp3
  13417. mt_arp2:move.w    $10(a6),d2
  13418.     bra.s    mt_arp4
  13419. mt_arp3:asl.w    #1,d0
  13420.     moveq    #0,d1
  13421.     move.w    $10(a6),d1
  13422.     lea    mt_periods(pc),a0
  13423.     moveq    #$24,d7
  13424. mt_arploop:
  13425.     move.w    (a0,d0.w),d2
  13426.     cmp.w    (a0),d1
  13427.     bge.s    mt_arp4
  13428.     addq.l    #2,a0
  13429.     dbf    d7,mt_arploop
  13430.     rts
  13431. mt_arp4:move.w    d2,$6(a5)
  13432.     rts
  13433.  
  13434. mt_getnew:
  13435.     move.l    mt_data,a0
  13436.     move.l    a0,a3
  13437.     move.l    a0,a2
  13438.     add.l    #$c,a3
  13439.     add.l    #$3b8,a2
  13440.     add.l    #$43c,a0
  13441.  
  13442.     moveq    #0,d0
  13443.     move.l    d0,d1
  13444.     move.b    mt_songpos,d0
  13445.     move.b    (a2,d0.w),d1
  13446.     asl.l    #8,d1
  13447.     asl.l    #2,d1
  13448.     add.w    mt_pattpos,d1
  13449.     clr.w    mt_dmacon
  13450.  
  13451.     lea    $dff0a0,a5
  13452.     lea    mt_voice1(pc),a6
  13453.     bsr    mt_playvoice
  13454.     lea    $dff0b0,a5
  13455.     lea    mt_voice2(pc),a6
  13456.     bsr    mt_playvoice
  13457. ;    tst.b UseAllChannels
  13458. ;    beq mt_setdma
  13459.     lea    $dff0c0,a5
  13460.     lea    mt_voice3(pc),a6
  13461.     bsr    mt_playvoice
  13462.     lea    $dff0d0,a5
  13463.     lea    mt_voice4(pc),a6
  13464.     bsr    mt_playvoice
  13465.     bra    mt_setdma
  13466.  
  13467. PROTCALC:
  13468. ;    include "ab3:source_4000/protcalc.s"
  13469.     incbin "ab3:includes/protcalc.bin"
  13470. ENDPROTCALC:
  13471.  
  13472. mt_playvoice:
  13473.     move.l    (a0,d1.l),(a6)
  13474.     addq.l    #4,d1
  13475.     moveq    #0,d2
  13476.     move.b    $2(a6),d2
  13477.     and.b    #$f0,d2
  13478.     lsr.b    #4,d2
  13479.     move.b    (a6),d0
  13480.     and.b    #$f0,d0
  13481.     or.b    d0,d2
  13482.     tst.b    d2
  13483.     beq.s    mt_setregs
  13484.     moveq    #0,d3
  13485.     lea    mt_samplestarts(pc),a1
  13486.     move.l    d2,d4
  13487.     subq.l    #$1,d2
  13488.     asl.l    #2,d2
  13489.     mulu    #$1e,d4
  13490.     move.l    (a1,d2.l),$4(a6)
  13491.     move.w    (a3,d4.l),$8(a6)
  13492.     move.w    $2(a3,d4.l),$12(a6)
  13493.     move.w    $4(a3,d4.l),d3
  13494.     tst.w    d3
  13495.     beq.s    mt_noloop
  13496.     move.l    $4(a6),d2
  13497.     asl.w    #1,d3
  13498.     add.l    d3,d2
  13499.     move.l    d2,$a(a6)
  13500.     move.w    $4(a3,d4.l),d0
  13501.     add.w    $6(a3,d4.l),d0
  13502.     move.w    d0,8(a6)
  13503.     move.w    $6(a3,d4.l),$e(a6)
  13504.     move.w    $12(a6),d0
  13505.     asr.w #2,d0
  13506.     move.w d0,$8(a5)
  13507.     bra.s    mt_setregs
  13508. mt_noloop:
  13509.     move.l    $4(a6),d2
  13510.     add.l    d3,d2
  13511.     move.l    d2,$a(a6)
  13512.     move.w    $6(a3,d4.l),$e(a6)
  13513.     move.w    $12(a6),d0
  13514.     asr.w #2,d0
  13515.     move.w d0,$8(a5)
  13516. mt_setregs:
  13517.     move.w    (a6),d0
  13518.     and.w    #$fff,d0
  13519.     beq    mt_checkcom2
  13520.     move.b    $2(a6),d0
  13521.     and.b    #$F,d0
  13522.     cmp.b    #$3,d0
  13523.     bne.s    mt_setperiod
  13524.     bsr    mt_setmyport
  13525.     bra    mt_checkcom2
  13526. mt_setperiod:
  13527.     move.w    (a6),$10(a6)
  13528.     and.w    #$fff,$10(a6)
  13529.     move.w    $14(a6),d0
  13530.     move.w    d0,$dff096
  13531.     clr.b    $1b(a6)
  13532.  
  13533.     move.l    $4(a6),(a5)
  13534.     move.w    $8(a6),$4(a5)
  13535.     move.w    $10(a6),d0
  13536.     and.w    #$fff,d0
  13537.     move.w    d0,$6(a5)
  13538.     move.w    $14(a6),d0
  13539.     or.w    d0,mt_dmacon
  13540.     bra    mt_checkcom2
  13541.  
  13542. mt_setdma:
  13543.      move.w #250,d0
  13544. mt_wait:
  13545.      add.w #1,testchip
  13546.      dbra d0,mt_wait
  13547.     move.w    mt_dmacon,d0
  13548.     or.w    #$8000,d0
  13549.     and.w #%1111111111110011,d0
  13550.     move.w    d0,$dff096
  13551.     move.w #250,d0
  13552. mt_wait2:
  13553.     add.w #1,testchip
  13554.     dbra    d0,mt_wait2
  13555.     lea    $dff000,a5
  13556.     tst.b UseAllChannels
  13557.     beq.s noall
  13558.     lea    mt_voice4(pc),a6
  13559.     move.l    $a(a6),$d0(a5)
  13560.     move.w    $e(a6),$d4(a5)
  13561.     lea    mt_voice3(pc),a6
  13562.     move.l    $a(a6),$c0(a5)
  13563.     move.w    $e(a6),$c4(a5)
  13564. noall:
  13565.     lea    mt_voice2(pc),a6
  13566.     move.l    $a(a6),$b0(a5)
  13567.     move.w    $e(a6),$b4(a5)
  13568.     lea    mt_voice1(pc),a6
  13569.     move.l    $a(a6),$a0(a5)
  13570.     move.w    $e(a6),$a4(a5)
  13571.  
  13572.     add.w    #$10,mt_pattpos
  13573.     cmp.w    #$400,mt_pattpos
  13574.     bne.s    mt_endr
  13575. mt_nex:    clr.w    mt_pattpos
  13576.     clr.b    mt_break
  13577.     addq.b    #1,mt_songpos
  13578.     and.b    #$7f,mt_songpos
  13579.     move.b    mt_songpos,d1
  13580. ;    cmp.b    mt_data+$3b6,d1
  13581. ;    bne.s    mt_endr
  13582. ;    move.b    mt_data+$3b7,mt_songpos
  13583. mt_endr:tst.b    mt_break
  13584.     bne.s    mt_nex
  13585.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  13586.     rts
  13587.  
  13588. mt_setmyport:
  13589.     move.w    (a6),d2
  13590.     and.w    #$fff,d2
  13591.     move.w    d2,$18(a6)
  13592.     move.w    $10(a6),d0
  13593.     clr.b    $16(a6)
  13594.     cmp.w    d0,d2
  13595.     beq.s    mt_clrport
  13596.     bge.s    mt_rt
  13597.     move.b    #$1,$16(a6)
  13598.     rts
  13599. mt_clrport:
  13600.     clr.w    $18(a6)
  13601. mt_rt:    rts
  13602.  
  13603. CODESTORE: dc.l 0
  13604.  
  13605. mt_myport:
  13606.     move.b    $3(a6),d0
  13607.     beq.s    mt_myslide
  13608.     move.b    d0,$17(a6)
  13609.     clr.b    $3(a6)
  13610. mt_myslide:
  13611.     tst.w    $18(a6)
  13612.     beq.s    mt_rt
  13613.     moveq    #0,d0
  13614.     move.b    $17(a6),d0
  13615.     tst.b    $16(a6)
  13616.     bne.s    mt_mysub
  13617.     add.w    d0,$10(a6)
  13618.     move.w    $18(a6),d0
  13619.     cmp.w    $10(a6),d0
  13620.     bgt.s    mt_myok
  13621.     move.w    $18(a6),$10(a6)
  13622.     clr.w    $18(a6)
  13623. mt_myok:move.w    $10(a6),$6(a5)
  13624.     rts
  13625. mt_mysub:
  13626.     sub.w    d0,$10(a6)
  13627.     move.w    $18(a6),d0
  13628.     cmp.w    $10(a6),d0
  13629.     blt.s    mt_myok
  13630.     move.w    $18(a6),$10(a6)
  13631.     clr.w    $18(a6)
  13632.     move.w    $10(a6),$6(a5)
  13633.     rts
  13634.  
  13635. mt_vib:    move.b    $3(a6),d0
  13636.     beq.s    mt_vi
  13637.     move.b    d0,$1a(a6)
  13638.  
  13639. mt_vi:    move.b    $1b(a6),d0
  13640.     lea    mt_sin(pc),a4
  13641.     lsr.w    #$2,d0
  13642.     and.w    #$1f,d0
  13643.     moveq    #0,d2
  13644.     move.b    (a4,d0.w),d2
  13645.     move.b    $1a(a6),d0
  13646.     and.w    #$f,d0
  13647.     mulu    d0,d2
  13648.     lsr.w    #$6,d2
  13649.     move.w    $10(a6),d0
  13650.     tst.b    $1b(a6)
  13651.     bmi.s    mt_vibmin
  13652.     add.w    d2,d0
  13653.     bra.s    mt_vib2
  13654. mt_vibmin:
  13655.     sub.w    d2,d0
  13656. mt_vib2:move.w    d0,$6(a5)
  13657.     move.b    $1a(a6),d0
  13658.     lsr.w    #$2,d0
  13659.     and.w    #$3c,d0
  13660.     add.b    d0,$1b(a6)
  13661.     rts
  13662.  
  13663. mt_nop:    move.w    $10(a6),$6(a5)
  13664.     rts
  13665.  
  13666.  
  13667. mt_checkcom:
  13668.     move.w    $2(a6),d0
  13669.     and.w    #$fff,d0
  13670.     beq.s    mt_nop
  13671.     move.b    $2(a6),d0
  13672.     and.b    #$f,d0
  13673.     tst.b    d0
  13674.     beq    mt_arpeggio
  13675.     cmp.b    #$1,d0
  13676.     beq.s    mt_portup
  13677.     cmp.b    #$2,d0
  13678.     beq    mt_portdown
  13679.     cmp.b    #$3,d0
  13680.     beq    mt_myport
  13681.     cmp.b    #$4,d0
  13682.     beq    mt_vib
  13683.     move.w    $10(a6),$6(a5)
  13684.     cmp.b    #$a,d0
  13685.     beq.s    mt_volslide
  13686.     rts
  13687.  
  13688. mt_volslide:
  13689.     moveq    #0,d0
  13690.     move.b    $3(a6),d0
  13691.     lsr.b    #4,d0
  13692.     tst.b    d0
  13693.     beq.s    mt_voldown
  13694.     add.w    d0,$12(a6)
  13695.     cmp.w    #$40,$12(a6)
  13696.     bmi.s    mt_vol2
  13697.     move.w    #$40,$12(a6)
  13698. mt_vol2:move.w    $12(a6),d0
  13699.     asr.w #2,d0
  13700.     move.w d0,$8(a5)
  13701.     rts
  13702.  
  13703. mt_voldown:
  13704.     moveq    #0,d0
  13705.     move.b    $3(a6),d0
  13706.     and.b    #$f,d0
  13707.     sub.w    d0,$12(a6)
  13708.     bpl.s    mt_vol3
  13709.     clr.w    $12(a6)
  13710. mt_vol3:move.w    $12(a6),d0
  13711.     asr.w #2,d0
  13712.     move.w d0,$8(a5)
  13713.     rts
  13714.  
  13715. mt_portup:
  13716.     moveq    #0,d0
  13717.     move.b    $3(a6),d0
  13718.     sub.w    d0,$10(a6)
  13719.     move.w    $10(a6),d0
  13720.     and.w    #$fff,d0
  13721.     cmp.w    #$71,d0
  13722.     bpl.s    mt_por2
  13723.     and.w    #$f000,$10(a6)
  13724.     or.w    #$71,$10(a6)
  13725. mt_por2:move.w    $10(a6),d0
  13726.     and.w    #$fff,d0
  13727.     move.w    d0,$6(a5)
  13728.     rts
  13729.  
  13730. mt_portdown:
  13731.     clr.w    d0
  13732.     move.b    $3(a6),d0
  13733.     add.w    d0,$10(a6)
  13734.     move.w    $10(a6),d0
  13735.     and.w    #$fff,d0
  13736.     cmp.w    #$358,d0
  13737.     bmi.s    mt_por3
  13738.     and.w    #$f000,$10(a6)
  13739.     or.w    #$358,$10(a6)
  13740. mt_por3:move.w    $10(a6),d0
  13741.     and.w    #$fff,d0
  13742.     move.w    d0,$6(a5)
  13743.     rts
  13744.  
  13745. mt_checkcom2:
  13746.     move.b    $2(a6),d0
  13747.     and.b    #$f,d0
  13748.     cmp.b    #$e,d0
  13749.     beq.s    mt_setfilt
  13750.     cmp.b    #$d,d0
  13751.     beq.s    mt_pattbreak
  13752.     cmp.b    #$b,d0
  13753.     beq.s    mt_posjmp
  13754.     cmp.b    #$c,d0
  13755.     beq.s    mt_setvol
  13756.     cmp.b    #$f,d0
  13757.     beq.s    mt_setspeed
  13758.     rts
  13759.  
  13760. mt_setfilt:
  13761.     move.b    $3(a6),d0
  13762.     and.b    #$1,d0
  13763.     asl.b    #$1,d0
  13764.     and.b    #$fd,$bfe001
  13765.     or.b    d0,$bfe001
  13766.     rts
  13767. mt_pattbreak:
  13768.     not.b    mt_break
  13769.     rts
  13770. mt_posjmp:
  13771.     st reachedend
  13772.     move.b    $3(a6),d0
  13773.     subq.b    #$1,d0
  13774.     move.b    d0,mt_songpos
  13775.     not.b    mt_break
  13776.     rts
  13777. mt_setvol:
  13778.     cmp.b    #$40,$3(a6)
  13779.     ble.s    mt_vol4
  13780.     move.b    #$40,$3(a6)
  13781. mt_vol4:move.b    $3(a6),d0
  13782.     asr.w #2,d0
  13783.     move.w d0,$8(a5)
  13784.     rts
  13785. mt_setspeed:
  13786.     cmp.b    #$1f,$3(a6)
  13787.     ble.s    mt_sets
  13788.     move.b    #$1f,$3(a6)
  13789. mt_sets:move.b    $3(a6),d0
  13790.     beq.s    mt_rts2
  13791.     move.b    d0,mt_speed
  13792.     clr.b    mt_counter
  13793. mt_rts2:rts
  13794.  
  13795. mt_sin:
  13796.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  13797.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  13798.  
  13799. mt_periods:
  13800.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  13801.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  13802.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  13803.  DC.w $007f,$0078,$0071,$0000,$0000
  13804.  
  13805. reachedend: dc.b 0
  13806. mt_speed:    DC.b    6
  13807. mt_songpos:    DC.b    0
  13808. mt_pattpos:    DC.w    0
  13809. mt_counter:    DC.b    0
  13810.  
  13811. mt_break:    DC.b    0
  13812. mt_dmacon:    DC.w    0
  13813. mt_samplestarts:DS.L    $1f
  13814. mt_voice1:    DS.w    10
  13815.         DC.w    1
  13816.         DS.w    3
  13817. mt_voice2:    DS.w    10
  13818.         DC.w    2
  13819.         DS.w    3
  13820. mt_voice3:    DS.w    10
  13821.         DC.w    4
  13822.         DS.w    3
  13823. mt_voice4:    DS.w    10
  13824.         DC.w    8
  13825.         DS.w    3
  13826.  
  13827. CHEATPTR: dc.l 0
  13828. CHEATNUM: dc.l 0
  13829.  
  13830. testchip: dc.w 0
  13831.  
  13832. ;/* End of File */
  13833. mt_data: dc.l 0
  13834. tstchip: dc.l 0
  13835.  include "SERIAL_NIGHTMARE"
  13836.  
  13837. ingame:
  13838. ; incbin "ab3:includes/ingame"
  13839. gameover: 
  13840. ;incbin "ab3:includes/gameover"
  13841. welldone: incbin "ab3:includes/newwelldone"
  13842.  
  13843.  
  13844.